Prevent the --keep-global-symbol and --globalize-symbol options from being used together.
authorNick Clifton <nickc@redhat.com>
Thu, 11 Oct 2018 10:38:10 +0000 (11:38 +0100)
committerNick Clifton <nickc@redhat.com>
Thu, 11 Oct 2018 10:38:10 +0000 (11:38 +0100)
commitde564eb5cc8c67fc38f9910937935eef5ebc17d8
tree8586b85602d6752c61d991f8fe5d759760e992d6
parentfbe61a3661b083a666e6550b3b0c2de364e6d4a6
Prevent the --keep-global-symbol and --globalize-symbol options from being used together.

This is the result of an email thread starting here:
  https://sourceware.org/ml/binutils/2018-09/msg00031.html

The main point of the thread is this observation:

  * Supposing we had an object file with two globals, SomeGlobal and
  SomeOtherGlobal, if one were to do "--globalize-symbol SomeGlobal
  --keep-global-symbol SomeOtherGlobal", you might expect that both
  SomeGlobal and SomeOtherGlobal are global in the output file... but it
  isn't. Because --keep-global-symbol is set and doesn't include
  SomeGlobal, SomeGlobal will be demoted to a local symbol. And because
  the check to see if we should apply the --globalize-symbol flag checks
  "flags" (the original flag set), and not "sym->flags", it decides not
  to do anything, so SomeGlobal remains a local symbol. Although this is
  a weird edge case, should this be changed so that --keep-global-symbol
  implicitly keeps anything also specified via --globalize-symbol? (The
  code seems technically correct with respect to the documentation, but
  IMO the behavior is counter-intuitive).

binutils* objcopy.c (copy_main): Issue a fata error if the
--keep-global-symbol(s) and the --globalize-symbol(s) options are
used together.
* doc/binutils.texi: Document that the two options are
incompatible.
* testsuite/binutils-all/copy-5.d: New test.
* testsuite/binutils-all/objcopy.exp: Run the new test.
binutils/ChangeLog
binutils/doc/binutils.texi
binutils/objcopy.c
binutils/testsuite/binutils-all/copy-5.d [new file with mode: 0644]
binutils/testsuite/binutils-all/objcopy.exp