mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
Add a --no-weak option to nm.
PR 29135 * nm.c (non_weak): New variable. (filter_symbols): When non-weak is true, ignore weak symbols. (long_options): Add --no-weak. (usage): Mention --no-weak. (main): Handle -W/--no-weak. * doc/binutils.texi: Document new feature. * NEWS: Mention the new feature. * testsuite/binutils-all/nm.exp: Add test of new feature. * testsuite/binutils-all/no-weak.s: New test source file.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
2022-05-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 29135
|
||||||
|
* nm.c (non_weak): New variable.
|
||||||
|
(filter_symbols): When non-weak is true, ignore weak symbols.
|
||||||
|
(long_options): Add --no-weak.
|
||||||
|
(usage): Mention --no-weak.
|
||||||
|
(main): Handle -W/--no-weak.
|
||||||
|
* doc/binutils.texi: Document new feature.
|
||||||
|
* NEWS: Mention the new feature.
|
||||||
|
* testsuite/binutils-all/nm.exp: Add test of new feature.
|
||||||
|
* testsuite/binutils-all/no-weak.s: New test source file.
|
||||||
|
|
||||||
2022-04-25 Nick Clifton <nickc@redhat.com>
|
2022-04-25 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR 29072
|
PR 29072
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
* Add --no-weak/-W option to nm to make it ignore weak symbols.
|
||||||
|
|
||||||
* Add an option to objdump and readelf to prevent attempts to access debuginfod
|
* Add an option to objdump and readelf to prevent attempts to access debuginfod
|
||||||
servers when following links.
|
servers when following links.
|
||||||
|
|
||||||
* objcopy --weaken, --weaken-symbol, and --weaken-symbols now make ELF
|
* objcopy --weaken, --weaken-symbol, and --weaken-symbols now make ELF
|
||||||
STB_GNU_UNIQUE symbols weak.
|
STB_GNU_UNIQUE symbols weak.
|
||||||
|
|
||||||
|
@ -819,6 +819,7 @@ nm [@option{-A}|@option{-o}|@option{--print-file-name}]
|
|||||||
[@option{-u}|@option{--undefined-only}]
|
[@option{-u}|@option{--undefined-only}]
|
||||||
[@option{-U}|@option{--defined-only}]
|
[@option{-U}|@option{--defined-only}]
|
||||||
[@option{-V}|@option{--version}]
|
[@option{-V}|@option{--version}]
|
||||||
|
[@option{-W}|@option{--no-weak}]
|
||||||
[@option{-X 32_64}]
|
[@option{-X 32_64}]
|
||||||
[@option{--no-demangle}]
|
[@option{--no-demangle}]
|
||||||
[@option{--no-recurse-limit}|@option{--recurse-limit}]]
|
[@option{--no-recurse-limit}|@option{--recurse-limit}]]
|
||||||
@ -1213,6 +1214,10 @@ them as escape sequences highlighted in red (if supported by the
|
|||||||
output device). The colouring is intended to draw attention to the
|
output device). The colouring is intended to draw attention to the
|
||||||
presence of unicode sequences where they might not be expected.
|
presence of unicode sequences where they might not be expected.
|
||||||
|
|
||||||
|
@item -W
|
||||||
|
@itemx --no-weak
|
||||||
|
Do not display weak symbols.
|
||||||
|
|
||||||
@item --with-symbol-versions
|
@item --with-symbol-versions
|
||||||
@item --without-symbol-versions
|
@item --without-symbol-versions
|
||||||
Enables or disables the display of symbol version information. The
|
Enables or disables the display of symbol version information. The
|
||||||
|
@ -176,6 +176,7 @@ static const char *print_format_string = NULL;
|
|||||||
static int do_demangle = 0; /* Pretty print C++ symbol names. */
|
static int do_demangle = 0; /* Pretty print C++ symbol names. */
|
||||||
static int external_only = 0; /* Print external symbols only. */
|
static int external_only = 0; /* Print external symbols only. */
|
||||||
static int defined_only = 0; /* Print defined symbols only. */
|
static int defined_only = 0; /* Print defined symbols only. */
|
||||||
|
static int non_weak = 0; /* Ignore weak symbols. */
|
||||||
static int no_sort = 0; /* Don't sort; print syms in order found. */
|
static int no_sort = 0; /* Don't sort; print syms in order found. */
|
||||||
static int print_debug_syms = 0;/* Print debugger-only symbols too. */
|
static int print_debug_syms = 0;/* Print debugger-only symbols too. */
|
||||||
static int print_armap = 0; /* Describe __.SYMDEF data in archive files. */
|
static int print_armap = 0; /* Describe __.SYMDEF data in archive files. */
|
||||||
@ -281,6 +282,7 @@ static struct option long_options[] =
|
|||||||
{"undefined-only", no_argument, 0, 'u'},
|
{"undefined-only", no_argument, 0, 'u'},
|
||||||
{"unicode", required_argument, NULL, OPTION_UNICODE},
|
{"unicode", required_argument, NULL, OPTION_UNICODE},
|
||||||
{"version", no_argument, &show_version, 1},
|
{"version", no_argument, &show_version, 1},
|
||||||
|
{"no-weak", no_argument, 0, 'W'},
|
||||||
{"with-symbol-versions", no_argument, &with_symbol_versions, 1},
|
{"with-symbol-versions", no_argument, &with_symbol_versions, 1},
|
||||||
{"without-symbol-versions", no_argument, &with_symbol_versions, 0},
|
{"without-symbol-versions", no_argument, &with_symbol_versions, 0},
|
||||||
{0, no_argument, 0, 0}
|
{0, no_argument, 0, 0}
|
||||||
@ -364,6 +366,8 @@ usage (FILE *stream, int status)
|
|||||||
fprintf (stream, _("\
|
fprintf (stream, _("\
|
||||||
--unicode={default|show|invalid|hex|escape|highlight}\n\
|
--unicode={default|show|invalid|hex|escape|highlight}\n\
|
||||||
Specify how to treat UTF-8 encoded unicode characters\n"));
|
Specify how to treat UTF-8 encoded unicode characters\n"));
|
||||||
|
fprintf (stream, _("\
|
||||||
|
-W, --no-weak Ignore weak symbols\n"));
|
||||||
fprintf (stream, _("\
|
fprintf (stream, _("\
|
||||||
--with-symbol-versions Display version strings after symbol names\n"));
|
--with-symbol-versions Display version strings after symbol names\n"));
|
||||||
fprintf (stream, _("\
|
fprintf (stream, _("\
|
||||||
@ -808,6 +812,8 @@ filter_symbols (bfd *abfd, bool is_dynamic, void *minisyms,
|
|||||||
| BSF_GNU_UNIQUE)) != 0
|
| BSF_GNU_UNIQUE)) != 0
|
||||||
|| bfd_is_und_section (sym->section)
|
|| bfd_is_und_section (sym->section)
|
||||||
|| bfd_is_com_section (sym->section));
|
|| bfd_is_com_section (sym->section));
|
||||||
|
else if (non_weak)
|
||||||
|
keep = ((sym->flags & BSF_WEAK) == 0);
|
||||||
else
|
else
|
||||||
keep = 1;
|
keep = 1;
|
||||||
|
|
||||||
@ -2052,7 +2058,7 @@ main (int argc, char **argv)
|
|||||||
fatal (_("fatal error: libbfd ABI mismatch"));
|
fatal (_("fatal error: libbfd ABI mismatch"));
|
||||||
set_default_bfd_target ();
|
set_default_bfd_target ();
|
||||||
|
|
||||||
while ((c = getopt_long (argc, argv, "aABCDef:gHhjJlnopPrSst:uU:vVvX:",
|
while ((c = getopt_long (argc, argv, "aABCDef:gHhjJlnopPrSst:uU:vVvWX:",
|
||||||
long_options, (int *) 0)) != EOF)
|
long_options, (int *) 0)) != EOF)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
@ -2171,6 +2177,9 @@ main (int argc, char **argv)
|
|||||||
case 'V':
|
case 'V':
|
||||||
show_version = 1;
|
show_version = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'W':
|
||||||
|
non_weak = 1;
|
||||||
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
/* Ignored for (partial) AIX compatibility. On AIX, the
|
/* Ignored for (partial) AIX compatibility. On AIX, the
|
||||||
argument has values 32, 64, or 32_64, and specifies that
|
argument has values 32, 64, or 32_64, and specifies that
|
||||||
|
@ -340,7 +340,37 @@ if [is_elf_format] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set testname "nm --no-weak"
|
||||||
|
if {![binutils_assemble $srcdir/$subdir/no-weak.s tmpdir/no-weak.o]} then {
|
||||||
|
fail "$testname (assembly)"
|
||||||
|
} else {
|
||||||
|
if [is_remote host] {
|
||||||
|
set tmpfile [remote_download host tmpdir/no-weak.o]
|
||||||
|
} else {
|
||||||
|
set tmpfile tmpdir/no-weak.o
|
||||||
|
}
|
||||||
|
|
||||||
|
set got [binutils_run $NM "$NMFLAGS --no-weak $tmpfile"]
|
||||||
|
|
||||||
|
if [regexp "weak_with_default_value" $got] then {
|
||||||
|
fail "$testname (weak symbol with default value)"
|
||||||
|
} else {
|
||||||
|
pass "$testname (weak symbol with default value)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [regexp "weak_without_default_value" $got] then {
|
||||||
|
fail "$testname (weak symbol without default value)"
|
||||||
|
} else {
|
||||||
|
pass "$testname (weak symbol without default value)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# FIXME: We should re run this test without the --no-weak option
|
||||||
|
# and verify that the expected symbol names *are* shown...
|
||||||
|
|
||||||
|
if { $verbose < 1 } {
|
||||||
|
remote_file host delete "tmpdir/no0weak.o"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# There are certainly other tests that could be run.
|
# There are certainly other tests that could be run.
|
||||||
|
13
binutils/testsuite/binutils-all/no-weak.s
Normal file
13
binutils/testsuite/binutils-all/no-weak.s
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
.file "no-weak.c"
|
||||||
|
.text
|
||||||
|
|
||||||
|
.globl weak_with_default_value
|
||||||
|
.weak weak_with_default_value
|
||||||
|
weak_with_default_value:
|
||||||
|
.nop
|
||||||
|
|
||||||
|
.data
|
||||||
|
.weak weak_without_default_value
|
||||||
|
.dc.a weak_without_default_value
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user