aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog22
-rw-r--r--bfd/elf64-ppc.c27
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/readelf.c2
-rw-r--r--include/elf/ChangeLog4
-rw-r--r--include/elf/ppc.h4
6 files changed, 51 insertions, 13 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6e48ed9..a8d4b87 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2002-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Add dynamic
+ DT_PPC64_OPD and DT_PPC64_OPDSZ tags.
+ (ppc64_elf_finish_dynamic_sections): Set values for them.
+
2002-02-11 Alexandre Oliva <aoliva@redhat.com>
* elf32-sh.c: Added missing prototypes.
@@ -467,14 +473,14 @@
2002-01-31 Philipp Thomas <pthomas@suse.de>
- * coff-arm.c (coff_arm_merge_private_bfd_data): Move ERROR
- to front of message. Unify messages with elf32-arm.h. Use
- commas where neccessary.
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Use all upcase
- ERROR in messages. Unify messages with coff-arm.c. Correct
- VFP/FPA error message.
- (elf32_arm_print_private_bfd_data): Don't mark APCS-26 and
- APCS-32 for translation.
+ * coff-arm.c (coff_arm_merge_private_bfd_data): Move ERROR
+ to front of message. Unify messages with elf32-arm.h. Use
+ commas where neccessary.
+ * elf32-arm.h (elf32_arm_merge_private_bfd_data): Use all upcase
+ ERROR in messages. Unify messages with coff-arm.c. Correct
+ VFP/FPA error message.
+ (elf32_arm_print_private_bfd_data): Don't mark APCS-26 and
+ APCS-32 for translation.
2002-02-01 Hans-Peter Nilsson <hp@bitrange.com>
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index a945f5c..e0fb9bf 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -156,11 +156,8 @@ static boolean ppc64_elf_finish_dynamic_sections
/* Since .opd is an array of descriptors and each entry will end up
with identical R_PPC64_RELATIVE relocs, there is really no need to
propagate .opd relocs; The dynamic linker should be taught to
- relocate .opd without reloc entries. FIXME: the dynamic linker
- will need to know where and how large .opd is via a couple of new
- DT_PPC64_* tags, or perhaps just with one reloc that specifies the
- start of .opd via its offset and the size via its addend. Also,
- .opd should be trimmed of unused values. */
+ relocate .opd without reloc entries. FIXME: .opd should be trimmed
+ of unused values. */
#ifndef NO_OPD_RELOCS
#define NO_OPD_RELOCS 0
#endif
@@ -3128,6 +3125,13 @@ ppc64_elf_size_dynamic_sections (output_bfd, info)
return false;
}
+ if (NO_OPD_RELOCS)
+ {
+ if (!add_dynamic_entry (DT_PPC64_OPD, 0)
+ || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
+ return false;
+ }
+
if (relocs)
{
if (!add_dynamic_entry (DT_RELA, 0)
@@ -4354,6 +4358,7 @@ ppc64_elf_finish_dynamic_sections (output_bfd, info)
for (; dyncon < dynconend; dyncon++)
{
Elf_Internal_Dyn dyn;
+ asection *s;
bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
@@ -4367,6 +4372,18 @@ ppc64_elf_finish_dynamic_sections (output_bfd, info)
+ htab->sglink->output_offset);
break;
+ case DT_PPC64_OPD:
+ s = bfd_get_section_by_name (output_bfd, ".opd");
+ if (s != NULL)
+ dyn.d_un.d_ptr = s->vma;
+ break;
+
+ case DT_PPC64_OPDSZ:
+ s = bfd_get_section_by_name (output_bfd, ".opd");
+ if (s != NULL)
+ dyn.d_un.d_val = s->_raw_size;
+ break;
+
case DT_PLTGOT:
dyn.d_un.d_ptr = (htab->splt->output_section->vma
+ htab->splt->output_offset);
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 54a7c41..b3edc01 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2002-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * readelf.c (get_ppc64_dynamic_type): Handle DT_PPC64_OPD and
+ DT_PPC64_OPDSZ.
+
2002-02-11 Daniel Jacobowitz <drow@mvista.com>
* MAINTAINERS: List myself as branch maintainer.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index e80a69d..0c95f05 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1193,6 +1193,8 @@ get_ppc64_dynamic_type (type)
switch (type)
{
case DT_PPC64_GLINK: return "PPC64_GLINK";
+ case DT_PPC64_OPD: return "PPC64_OPD";
+ case DT_PPC64_OPDSZ: return "PPC64_OPDSZ";
default:
return NULL;
}
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 79f99ac..f0e04db 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,7 @@
+2002-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc.h (DT_PPC64_OPD, DT_PPC64_OPDSZ): Define.
+
2002-02-09 Richard Henderson <rth@redhat.com>
* alpha.h (R_ALPHA_BRSGP): New.
diff --git a/include/elf/ppc.h b/include/elf/ppc.h
index 8e4af62..dfb43f4 100644
--- a/include/elf/ppc.h
+++ b/include/elf/ppc.h
@@ -174,6 +174,10 @@ END_RELOC_NUMBERS (R_PPC_max)
/* Specify the start of the .glink section. */
#define DT_PPC64_GLINK DT_LOPROC
+/* Specify the start and size of the .opd section. */
+#define DT_PPC64_OPD (DT_LOPROC + 1)
+#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
+
/* Processor specific flags for the ELF header e_flags field. */
#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */