[PATCH] nm: Ignore --with-symbol-versions for backward compatibility

H.J. Lu hjl.tools@gmail.com
Thu Jul 30 12:04:53 GMT 2020


On Mon, Jul 27, 2020 at 6:44 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Since
>
> commit 7e6e972f74aeac0ebdbd95a7f905d871cd2581de
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date:   Tue Mar 24 04:23:11 2020 -0700
>
>     bfd: Display symbol version for nm -D
>
> always displays symbol version for nm, ignore --with-symbol-versions for
> backward compatibility.
>
> binutils/
>
>         PR binutils/26302
>         * nm.c (with_symbol_versions): Removed.
>         (long_option_values): Add OPTION_WITH_SYMBOL_VERSIONS.
>         (long_options): Update --with-symbol-versions entry.
>         (print_symbol): Remove the with_symbol_versions check.
>         (main): Add OPTION_WITH_SYMBOL_VERSIONS for backward
>         compatibility.
>         * doc/binutils.texi: Update --with-symbol-versions documentation.
>
> ld/
>
>         PR binutils/26302
>         * testsuite/ld-elf/pr26302.nd: New file.
>         * testsuite/ld-elf/pr26302.ver: Likewise.
>         * testsuite/ld-elf/pr26302a.c: Likewise.
>         * testsuite/ld-elf/pr26302b.c: Likewise.
>         * testsuite/ld-elf/shared.exp: Run binutils/26302 tests.
> ---
>  binutils/doc/binutils.texi      |  3 ++-
>  binutils/nm.c                   | 26 +++++++-------------------
>  ld/testsuite/ld-elf/pr26302.nd  |  3 +++
>  ld/testsuite/ld-elf/pr26302.ver |  5 +++++
>  ld/testsuite/ld-elf/pr26302a.c  |  4 ++++
>  ld/testsuite/ld-elf/pr26302b.c  |  7 +++++++
>  ld/testsuite/ld-elf/shared.exp  | 18 ++++++++++++++++++
>  7 files changed, 46 insertions(+), 20 deletions(-)
>  create mode 100644 ld/testsuite/ld-elf/pr26302.nd
>  create mode 100644 ld/testsuite/ld-elf/pr26302.ver
>  create mode 100644 ld/testsuite/ld-elf/pr26302a.c
>  create mode 100644 ld/testsuite/ld-elf/pr26302b.c
>
> diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
> index 4a11bf1f1a..d4a3bd69ee 100644
> --- a/binutils/doc/binutils.texi
> +++ b/binutils/doc/binutils.texi
> @@ -1136,7 +1136,8 @@ version string is displayed as a suffix to the symbol name, preceded by
>  an @@ character.  For example @samp{foo@@VER_1}.  If the version is
>  the default version to be used when resolving unversioned references
>  to the symbol then it is displayed as a suffix preceded by two @@
> -characters.  For example @samp{foo@@@@VER_2}.
> +characters.  For example @samp{foo@@@@VER_2}.  Note that this option
> +is always enabled.
>
>  @item --target=@var{bfdname}
>  @cindex object code format
> diff --git a/binutils/nm.c b/binutils/nm.c
> index 1b5122d56a..69e697ae92 100644
> --- a/binutils/nm.c
> +++ b/binutils/nm.c
> @@ -161,7 +161,6 @@ static int show_version = 0;        /* Show the version number.  */
>  static int show_synthetic = 0; /* Display synthesized symbols too.  */
>  static int line_numbers = 0;   /* Print line numbers for symbols.  */
>  static int allow_special_symbols = 0;  /* Allow special symbols.  */
> -static int with_symbol_versions = 0; /* Include symbol version information in the output.  */
>
>  static int demangle_flags = DMGL_ANSI | DMGL_PARAMS;
>
> @@ -192,7 +191,8 @@ enum long_option_values
>    OPTION_PLUGIN,
>    OPTION_SIZE_SORT,
>    OPTION_RECURSE_LIMIT,
> -  OPTION_NO_RECURSE_LIMIT
> +  OPTION_NO_RECURSE_LIMIT,
> +  OPTION_WITH_SYMBOL_VERSIONS
>  };
>
>  static struct option long_options[] =
> @@ -226,7 +226,8 @@ static struct option long_options[] =
>    {"defined-only", no_argument, &defined_only, 1},
>    {"undefined-only", no_argument, &undefined_only, 1},
>    {"version", no_argument, &show_version, 1},
> -  {"with-symbol-versions", no_argument, &with_symbol_versions, 1},
> +  {"with-symbol-versions", no_argument, NULL,
> +   OPTION_WITH_SYMBOL_VERSIONS},
>    {0, no_argument, 0, 0}
>  };
>
> @@ -901,22 +902,6 @@ print_symbol (bfd *        abfd,
>
>    format->print_symbol_info (&info, abfd);
>
> -  if (with_symbol_versions)
> -    {
> -      const char *  version_string = NULL;
> -      bfd_boolean   hidden = FALSE;
> -
> -      if ((sym->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0)
> -       version_string = bfd_get_symbol_version_string (abfd, sym,
> -                                                       TRUE, &hidden);
> -
> -      if (bfd_is_und_section (bfd_asymbol_section (sym)))
> -       hidden = TRUE;
> -
> -      if (version_string && *version_string != '\0')
> -       printf (hidden ? "@%s" : "@@%s", version_string);
> -    }
> -
>    if (line_numbers)
>      {
>        static asymbol **syms;
> @@ -1761,6 +1746,9 @@ main (int argc, char **argv)
>         case OPTION_NO_RECURSE_LIMIT:
>           demangle_flags |= DMGL_NO_RECURSE_LIMIT;
>           break;
> +       case OPTION_WITH_SYMBOL_VERSIONS:
> +         /* Ignored for backward compatibility.  */
> +         break;
>         case 'D':
>           dynamic = 1;
>           break;
> diff --git a/ld/testsuite/ld-elf/pr26302.nd b/ld/testsuite/ld-elf/pr26302.nd
> new file mode 100644
> index 0000000000..1f2fbdf9a3
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr26302.nd
> @@ -0,0 +1,3 @@
> +#...
> + +U foo@@FOO
> +#pass
> diff --git a/ld/testsuite/ld-elf/pr26302.ver b/ld/testsuite/ld-elf/pr26302.ver
> new file mode 100644
> index 0000000000..f2c03ac7a1
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr26302.ver
> @@ -0,0 +1,5 @@
> +FOO
> +{
> +global:
> +  foo;
> +};
> diff --git a/ld/testsuite/ld-elf/pr26302a.c b/ld/testsuite/ld-elf/pr26302a.c
> new file mode 100644
> index 0000000000..cd0130cacd
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr26302a.c
> @@ -0,0 +1,4 @@
> +void
> +foo (void)
> +{
> +}
> diff --git a/ld/testsuite/ld-elf/pr26302b.c b/ld/testsuite/ld-elf/pr26302b.c
> new file mode 100644
> index 0000000000..eae278df96
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr26302b.c
> @@ -0,0 +1,7 @@
> +extern void foo (void);
> +
> +void
> +bar (void)
> +{
> +  foo ();
> +}
> diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
> index e9e9012058..014937175f 100644
> --- a/ld/testsuite/ld-elf/shared.exp
> +++ b/ld/testsuite/ld-elf/shared.exp
> @@ -843,6 +843,24 @@ run_cc_link_tests [list \
>         {{readelf {--dyn-syms --wide} pr26094-1b.rd}} \
>         "pr26094-1" \
>      ] \
> +    [list \
> +       "Build pr26302a.so" \
> +       "-shared -Wl,--version-script=pr26302.ver" \
> +       "-fPIC" \
> +       {pr26302a.c} \
> +       {} \
> +       "pr26302a.so"
> +    ] \
> +    [list \
> +       "Build pr26302b.so" \
> +       "-shared -Wl,--no-as-needed tmpdir/pr26302a.so" \
> +       "-fPIC" \
> +       {pr26302b.c} \
> +       {{nm {-u} pr26302.nd} \
> +        {nm {-u -D} pr26302.nd} \
> +        {nm {-u -D --with-symbol-versions} pr26302.nd}} \
> +       "pr26302b.so" \
> +    ] \
>  ]
>
>  run_ld_link_tests [list \
> --
> 2.26.2
>

Hi Nick, Alan,

Can you take a look at this?

Thanks.


--
H.J.


More information about the Binutils mailing list