diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2009-04-01 20:09:03 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2009-04-01 20:09:03 +0000 |
commit | 54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c (patch) | |
tree | 8669fa27637845c03823977b58587c0d5799b01e /bfd | |
parent | 2e470849cc639eca2239a8c9ab1be4d19481266e (diff) | |
download | gdb-54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c.zip gdb-54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c.tar.gz gdb-54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c.tar.bz2 |
bfd/
* xcofflink.c (bfd_link_input_bfd): Treat __rtinit as C_HIDEXT
rather than C_EXT.
ld/testsuite/
* ld-powerpc/aix-gc-1.nd: New test.
* ld-powerpc/aix52.exp: Run it.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/xcofflink.c | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6d3b405..544e5ad 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,10 @@ 2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com> + * xcofflink.c (bfd_link_input_bfd): Treat __rtinit as C_HIDEXT + rather than C_EXT. + +2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com> + * coff-rs6000.c (member_layout): New structure. (archive_iterator): Likewise. (member_layout_init): New function. diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 97c051a..cb1da9e 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -4289,6 +4289,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, esym = (bfd_byte *) obj_coff_external_syms (input_bfd); esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz; + sym_hash = obj_xcoff_sym_hashes (input_bfd); isymp = finfo->internal_syms; indexp = finfo->sym_indices; csectpp = xcoff_data (input_bfd)->csects; @@ -4336,6 +4337,16 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } + /* Make __rtinit C_HIDEXT rather than C_EXT. This avoids + multiple definition problems when linking a shared object + statically. (The native linker doesn't enter __rtinit into + the normal table at all, but having a local symbol can make + the objdump output easier to read.) */ + if (isym.n_sclass == C_EXT + && *sym_hash + && ((*sym_hash)->flags & XCOFF_RTINIT) != 0) + isym.n_sclass = C_HIDEXT; + /* The value of a C_FILE symbol is the symbol index of the next C_FILE symbol. The value of the last C_FILE symbol is -1. We try to get this right, below, just before we @@ -4664,6 +4675,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } + sym_hash += add; indexp += add; isymp += add; csectpp += add; |