Skip to content
  • Nick Clifton's avatar
    Prevent the --keep-global-symbol and --globalize-symbol options from being used together. · de564eb5
    Nick Clifton authored
    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.
    de564eb5