diff options
-rw-r--r-- | trunk/ChangeLog | 16 | ||||
-rw-r--r-- | trunk/src/arch-alpha.c | 5 | ||||
-rw-r--r-- | trunk/src/arch-arm.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-cris.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-i386.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-ia64.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-ppc.c | 3 | ||||
-rw-r--r-- | trunk/src/arch-s390.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-s390x.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-sh.c | 4 | ||||
-rw-r--r-- | trunk/src/arch-sparc.c | 2 | ||||
-rw-r--r-- | trunk/src/arch-sparc64.c | 2 | ||||
-rw-r--r-- | trunk/src/arch-x86_64.c | 4 | ||||
-rw-r--r-- | trunk/src/prelink.c | 2 | ||||
-rw-r--r-- | trunk/src/prelink.h | 2 |
15 files changed, 50 insertions, 14 deletions
diff --git a/trunk/ChangeLog b/trunk/ChangeLog index 3f70894..7b78dd2 100644 --- a/trunk/ChangeLog +++ b/trunk/ChangeLog @@ -1,5 +1,21 @@ 2006-10-24 Richard Sandiford <richard@codesourcery.com> + * src/prelink.h (PLArch): Make the arch_prelink callback take + a "struct prelink_info *" argument, not a "DSO *" argument. + * src/prelink.c (prelink): Adjust call accordingly. + * src/arch-alpha.c (alpha_arch_prelink): Adjust definition accordingly. + * src/arch-arm.c (arm_arch_prelink): Likewise. + * src/arch-cris.c (cris_arch_prelink): Likewise. + * src/arch-i386.c (i386_arch_prelink): Likewise. + * src/arch-ia64.c (ia64_arch_prelink): Likewise. + * src/arch-ppc.c (ppc_arch_prelink): Likewise. + * src/arch-s390.c (s390_arch_prelink): Likewise + * src/arch-s390x.c (s390x_arch_prelink): Likewise + * src/arch-sh.c (sh_arch_prelink): Likewise. + * src/arch-sparc64.c (sparc64_arch_prelink): Likewise. + * src/arch-sparc.c (sparc_arch_prelink): Likewise + * src/arch-x86_64.c (x86_64_arch_prelink): Likewise. + * src/prelink.h (PLArch): Add an arch_adjust callback. * src/dso.c (adjust_dso): Use it, if defined. diff --git a/trunk/src/arch-alpha.c b/trunk/src/arch-alpha.c index 4b74aaa..51182ed 100644 --- a/trunk/src/arch-alpha.c +++ b/trunk/src/arch-alpha.c @@ -367,9 +367,12 @@ alpha_need_rel_to_rela (DSO *dso, int first, int last) } static int -alpha_arch_prelink (DSO *dso) +alpha_arch_prelink (struct prelink_info *info) { + DSO *dso; + /* Correct sh_entsize on .plt sections. */ + dso = info->dso; if (dso->info[DT_PLTGOT]) { int sec = addr_to_sec (dso, dso->info[DT_PLTGOT] + 16); diff --git a/trunk/src/arch-arm.c b/trunk/src/arch-arm.c index 09d0f68..6641e86 100644 --- a/trunk/src/arch-arm.c +++ b/trunk/src/arch-arm.c @@ -495,10 +495,12 @@ arm_need_rel_to_rela (DSO *dso, int first, int last) } static int -arm_arch_prelink (DSO *dso) +arm_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt into got[1]. diff --git a/trunk/src/arch-cris.c b/trunk/src/arch-cris.c index dd45ff9..6b56016 100644 --- a/trunk/src/arch-cris.c +++ b/trunk/src/arch-cris.c @@ -309,10 +309,12 @@ cris_need_rel_to_rela (DSO *dso, int first, int last) } static int -cris_arch_prelink (DSO *dso) +cris_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 28 into got[1]. diff --git a/trunk/src/arch-i386.c b/trunk/src/arch-i386.c index 3302211..d5211b2 100644 --- a/trunk/src/arch-i386.c +++ b/trunk/src/arch-i386.c @@ -599,10 +599,12 @@ i386_need_rel_to_rela (DSO *dso, int first, int last) } static int -i386_arch_prelink (DSO *dso) +i386_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 0x16 into got[1]. diff --git a/trunk/src/arch-ia64.c b/trunk/src/arch-ia64.c index 958bf7c..0be672c 100644 --- a/trunk/src/arch-ia64.c +++ b/trunk/src/arch-ia64.c @@ -418,14 +418,16 @@ ia64_create_opd (struct prelink_info *info, int first, int last, int plt) } static int -ia64_arch_prelink (DSO *dso) +ia64_arch_prelink (struct prelink_info *info) { + DSO *dso; int plt = -1, got = -1, i; const char *name; /* Write address of .plt + 0x30 into .got[1]. .plt + 0x30 is what .IA_64.pltoff[0] contains unless prelinking. */ + dso = info->dso; for (i = 1; i < dso->ehdr.e_shnum; i++) if (dso->shdr[i].sh_type == SHT_PROGBITS) { diff --git a/trunk/src/arch-ppc.c b/trunk/src/arch-ppc.c index 4799755..5608750 100644 --- a/trunk/src/arch-ppc.c +++ b/trunk/src/arch-ppc.c @@ -668,8 +668,9 @@ ppc_arch_pre_prelink (DSO *dso) } static int -ppc_arch_prelink (DSO *dso) +ppc_arch_prelink (struct prelink_info *info) { + DSO *dso = info->dso; Elf32_Addr plt = dso->info[DT_PLTGOT]; if (plt && !dynamic_info_is_set (dso, DT_PPC_GOT_BIT)) diff --git a/trunk/src/arch-s390.c b/trunk/src/arch-s390.c index 989b05f..4be0dcb 100644 --- a/trunk/src/arch-s390.c +++ b/trunk/src/arch-s390.c @@ -337,10 +337,12 @@ s390_need_rel_to_rela (DSO *dso, int first, int last) } static int -s390_arch_prelink (DSO *dso) +s390_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 0x2c into got[1]. diff --git a/trunk/src/arch-s390x.c b/trunk/src/arch-s390x.c index 8942524..1e381c7 100644 --- a/trunk/src/arch-s390x.c +++ b/trunk/src/arch-s390x.c @@ -418,10 +418,12 @@ s390x_need_rel_to_rela (DSO *dso, int first, int last) } static int -s390x_arch_prelink (DSO *dso) +s390x_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 0x2e into got[1]. diff --git a/trunk/src/arch-sh.c b/trunk/src/arch-sh.c index 8701733..b448612 100644 --- a/trunk/src/arch-sh.c +++ b/trunk/src/arch-sh.c @@ -300,10 +300,12 @@ sh_need_rel_to_rela (DSO *dso, int first, int last) } static int -sh_arch_prelink (DSO *dso) +sh_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 36 into got[1]. diff --git a/trunk/src/arch-sparc.c b/trunk/src/arch-sparc.c index cdb6bc4..98bacac 100644 --- a/trunk/src/arch-sparc.c +++ b/trunk/src/arch-sparc.c @@ -471,7 +471,7 @@ sparc_need_rel_to_rela (DSO *dso, int first, int last) } static int -sparc_arch_prelink (DSO *dso) +sparc_arch_prelink (struct prelink_info *info) { return 0; } diff --git a/trunk/src/arch-sparc64.c b/trunk/src/arch-sparc64.c index 088e5b0..e673e99 100644 --- a/trunk/src/arch-sparc64.c +++ b/trunk/src/arch-sparc64.c @@ -524,7 +524,7 @@ sparc64_need_rel_to_rela (DSO *dso, int first, int last) } static int -sparc64_arch_prelink (DSO *dso) +sparc64_arch_prelink (struct prelink_info *info) { return 0; } diff --git a/trunk/src/arch-x86_64.c b/trunk/src/arch-x86_64.c index 0db1a23..8079f1a 100644 --- a/trunk/src/arch-x86_64.c +++ b/trunk/src/arch-x86_64.c @@ -350,10 +350,12 @@ x86_64_need_rel_to_rela (DSO *dso, int first, int last) } static int -x86_64_arch_prelink (DSO *dso) +x86_64_arch_prelink (struct prelink_info *info) { + DSO *dso; int i; + dso = info->dso; if (dso->info[DT_PLTGOT]) { /* Write address of .plt + 0x16 into got[1]. diff --git a/trunk/src/prelink.c b/trunk/src/prelink.c index a828440..b818b62 100644 --- a/trunk/src/prelink.c +++ b/trunk/src/prelink.c @@ -941,7 +941,7 @@ prelink (DSO *dso, struct prelink_entry *ent) } } - if (dso->arch->arch_prelink && dso->arch->arch_prelink (dso)) + if (dso->arch->arch_prelink && dso->arch->arch_prelink (&info)) goto error_out; if (dso->arch->read_opd && dso->arch->read_opd (dso, ent)) diff --git a/trunk/src/prelink.h b/trunk/src/prelink.h index 03128dc..9e8fa4c 100644 --- a/trunk/src/prelink.h +++ b/trunk/src/prelink.h @@ -156,7 +156,7 @@ struct PLArch #define RTYPE_CLASS_TLS (8|4) int (*reloc_class) (int); int (*arch_pre_prelink) (DSO *dso); - int (*arch_prelink) (DSO *dso); + int (*arch_prelink) (struct prelink_info *info); int (*arch_undo_prelink) (DSO *dso); int (*undo_prelink_rel) (DSO *dso, GElf_Rel *rel, GElf_Addr reladdr); int (*undo_prelink_rela) (DSO *dso, GElf_Rela *rela, GElf_Addr relaaddr); |