aboutsummaryrefslogtreecommitdiff
path: root/include/bfdlink.h
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-08-06 08:18:53 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-08-06 08:19:04 -0700
commita4819f54c0006554179631189131080be859eefb (patch)
treef6058c1da96aa3065bba0be6352946163aa5186d /include/bfdlink.h
parente2a084f2c152f6358ba926df22a313d3ef8d8509 (diff)
downloadfsf-binutils-gdb-a4819f54c0006554179631189131080be859eefb.zip
fsf-binutils-gdb-a4819f54c0006554179631189131080be859eefb.tar.gz
fsf-binutils-gdb-a4819f54c0006554179631189131080be859eefb.tar.bz2
Treat common symbol as undefined for --no-define-common
When --no-define-common is used to build shared library, treat common symbol as undefined so that common symbols that are referenced from a shared library to be assigned addresses only in the main program. This eliminates the unused duplicate space in the shared library, and also prevents any possible confusion over resolving to the wrong duplicate when there are many dynamic modules with specialized search paths for runtime symbol resolution. --no-define-common is only allowed when building a shared library. bfd/ PR ld/21903: * elflink.c (elf_link_add_object_symbols): Treat common symbol as undefined for --no-define-common. include/ PR ld/21903: * bfdlink.h (bfd_link_info): Add inhibit_common_definition. ld/ PR ld/21903: * ld.h (command_line): Remove inhibit_common_definition. * ldgram.y: Replace command_line.inhibit_common_definition with link_info.inhibit_common_definition. * ldlang.c (lang_common): Likewise. * lexsup.c (parse_args): Likewise. * ldmain.c (main): Only allow --no-define-common with -shared. * testsuite/ld-elf/pr21903.s: New file. * testsuite/ld-elf/pr21903a.d: Likewise. * testsuite/ld-elf/pr21903b.d: Likewise. * testsuite/ld-elf/pr21903c.d: Likewise. * testsuite/ld-elf/pr21903d.d: Likewise. * testsuite/ld-elf/pr21903e.d: Likewise.
Diffstat (limited to 'include/bfdlink.h')
-rw-r--r--include/bfdlink.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/bfdlink.h b/include/bfdlink.h
index e7c7836..2370c0d 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -489,6 +489,9 @@ struct bfd_link_info
/* TRUE if generate a 1-byte NOP as suffix for x86 call instruction. */
unsigned int call_nop_as_suffix : 1;
+ /* TRUE if common symbols should be treated as undefined. */
+ unsigned int inhibit_common_definition : 1;
+
/* The 1-byte NOP for x86 call instruction. */
char call_nop_byte;