summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2009-04-01 20:09:03 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2009-04-01 20:09:03 +0000
commit54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c (patch)
tree8669fa27637845c03823977b58587c0d5799b01e
parent2e470849cc639eca2239a8c9ab1be4d19481266e (diff)
downloadppe42-binutils-54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c.tar.gz
ppe42-binutils-54e2dbe0fc68c6125e099dd1fc6e7ab19af5b07c.zip
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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/xcofflink.c12
-rw-r--r--ld/testsuite/ChangeLog10
-rw-r--r--ld/testsuite/ld-powerpc/aix-gc-1.nd3
-rw-r--r--ld/testsuite/ld-powerpc/aix52.exp3
5 files changed, 32 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6d3b40518e..544e5adff9 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 97c051a2b9..cb1da9eb6a 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 124b11cd53..f1c5f490e8 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 0000000000..f399646b75
--- /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 c88ba9b510..4d32b2d006 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"
OpenPOWER on IntegriCloud