From: Fangrui Song Date: Wed, 16 Mar 2022 16:38:37 +0000 (-0700) Subject: objcopy --weaken-symbol: apply to STB_GNU_UNIQUE symbols X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=260ecdcec427146f760836092a040f957427760b;p=binutils-gdb.git objcopy --weaken-symbol: apply to STB_GNU_UNIQUE symbols PR binutils/28926 * objcopy.c (filter_symbols): Apply weaken to STB_GNU_UNIQUE symbols * NEWS: Mention feature. * testsuite/binutils-all/objcopy.exp (objcopy_test_symbol_manipulation): New test. * testsuite/binutils-all/weaken-gnu-unique.s: New. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 127ee5c50d1..f84323953d6 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2022-03-16 Fangrui Song + + PR binutils/28926 + * objcopy.c (filter_symbols): Apply weaken to STB_GNU_UNIQUE symbols + * NEWS: Mention feature. + * testsuite/binutils-all/objcopy.exp (objcopy_test_symbol_manipulation): New test. + * testsuite/binutils-all/weaken-gnu-unique.s: New. + 2022-03-16 Martin Storsjö PR 28885 diff --git a/binutils/NEWS b/binutils/NEWS index 3c447083e2e..7e3c005f25c 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -2,6 +2,8 @@ * Add an option to objdump and readelf to prevent attempts to access debuginfod servers when following links. +* objcopy --weaken, --weaken-symbol, and --weaken-symbols now make ELF + STB_GNU_UNIQUE symbols weak. Changes in 2.38: diff --git a/binutils/objcopy.c b/binutils/objcopy.c index d53aa5c6000..aaa5aa9b2af 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -1681,11 +1681,11 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (keep) { - if (((flags & BSF_GLOBAL) != 0 + if (((flags & (BSF_GLOBAL | BSF_GNU_UNIQUE)) || undefined) && (weaken || is_specified_symbol (name, weaken_specific_htab))) { - sym->flags &= ~ BSF_GLOBAL; + sym->flags &= ~ (BSF_GLOBAL | BSF_GNU_UNIQUE); sym->flags |= BSF_WEAK; } diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 32c76a11f3b..9a5dad5384e 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -1144,6 +1144,10 @@ proc objcopy_test_symbol_manipulation {} { verbose [file rootname $t] run_dump_test [file rootname $t] } + + if { [supports_gnu_unique] } { + run_dump_test "weaken-gnu-unique" + } } proc objcopy_test_elf_common_symbols {} { diff --git a/binutils/testsuite/binutils-all/weaken-gnu-unique.d b/binutils/testsuite/binutils-all/weaken-gnu-unique.d new file mode 100644 index 00000000000..b0e60c4ff80 --- /dev/null +++ b/binutils/testsuite/binutils-all/weaken-gnu-unique.d @@ -0,0 +1,8 @@ +#name: weaken STB_GNU_UNIQUE symbols +#PROG: objcopy +#objcopy: -W foo +#source: unique.s +#readelf: -s + +#... + +[0-9]+: +[0-9a-f]+ +[0-9]+ +OBJECT +WEAK +DEFAULT +[1-9] foo