diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/xcofflink.c | 12 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix-gc-1.nd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/aix52.exp | 3 |
5 files changed, 32 insertions, 1 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; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 124b11c..f1c5f49 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com> + + * ld-powerpc/aix-gc-1.nd: New test. + * ld-powerpc/aix52.exp: Run it. + +2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com> + + * ld-powerpc/aix-rel-1.s, ld-powerpc/aix-rel-1.od: New test. + * ld-powerpc/aix52.exp: Run it. + 2009-04-01 Dave Korn <dave.korn.cygwin@gmail.com> * ld-cygwin/exe-export.exp: Add "-lkernel32" when linking test exe. diff --git a/ld/testsuite/ld-powerpc/aix-gc-1.nd b/ld/testsuite/ld-powerpc/aix-gc-1.nd new file mode 100644 index 0000000..f399646 --- /dev/null +++ b/ld/testsuite/ld-powerpc/aix-gc-1.nd @@ -0,0 +1,3 @@ +#... +0*20000008 d __rtinit +#pass diff --git a/ld/testsuite/ld-powerpc/aix52.exp b/ld/testsuite/ld-powerpc/aix52.exp index c88ba9b..4d32b2d 100644 --- a/ld/testsuite/ld-powerpc/aix52.exp +++ b/ld/testsuite/ld-powerpc/aix52.exp @@ -131,7 +131,8 @@ set aix52tests { {"Garbage collection test 1" "-shared -binitfini:init_function:fini_function -bE:aix-gc-1.ex" "" {aix-gc-1.s} - {{objdump {-dz -j.text -j.data} aix-gc-1-SIZE.dd}} + {{objdump {-dz -j.text -j.data} aix-gc-1-SIZE.dd} + {nm {} aix-gc-1.nd}} "aix-gc-1.so"} {"Glink test 1" |