From 54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 1 Apr 2009 20:09:03 +0000 Subject: [PATCH] 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. --- bfd/ChangeLog | 5 +++++ bfd/xcofflink.c | 12 ++++++++++++ ld/testsuite/ChangeLog | 10 ++++++++++ ld/testsuite/ld-powerpc/aix-gc-1.nd | 3 +++ ld/testsuite/ld-powerpc/aix52.exp | 3 ++- 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1.nd diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6d3b40518e1..544e5adff9f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-04-01 Richard Sandiford + + * xcofflink.c (bfd_link_input_bfd): Treat __rtinit as C_HIDEXT + rather than C_EXT. + 2009-04-01 Richard Sandiford * coff-rs6000.c (member_layout): New structure. diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 97c051a2b9f..cb1da9eb6ae 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 124b11cd532..f1c5f490e81 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2009-04-01 Richard Sandiford + + * ld-powerpc/aix-gc-1.nd: New test. + * ld-powerpc/aix52.exp: Run it. + +2009-04-01 Richard Sandiford + + * 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 * 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 00000000000..f399646b757 --- /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 c88ba9b5101..4d32b2d0065 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" -- 2.30.2