summaryrefslogtreecommitdiffstats
path: root/trunk/src/arch-mips.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/arch-mips.c')
-rw-r--r--trunk/src/arch-mips.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/trunk/src/arch-mips.c b/trunk/src/arch-mips.c
index 4be23c8..3e39f03 100644
--- a/trunk/src/arch-mips.c
+++ b/trunk/src/arch-mips.c
@@ -550,9 +550,12 @@ mips_prelink_conflict_reloc (DSO *dso, struct prelink_info *info,
{
GElf_Addr value;
struct prelink_conflict *conflict;
- struct prelink_tls *tls;
+ struct prelink_tls *tls = NULL;
GElf_Rela *entry;
+ if (info->dso == dso)
+ return 0;
+
conflict = prelink_conflict (info, GELF_R_SYM (r_info),
GELF_R_TYPE (r_info));
if (conflict == NULL)
@@ -573,6 +576,12 @@ mips_prelink_conflict_reloc (DSO *dso, struct prelink_info *info,
return 0;
}
}
+ else if (conflict->ifunc)
+ {
+ error (0, 0, "%s: STT_GNU_IFUNC not handled on MIPS yet",
+ dso->filename);
+ return 1;
+ }
else
{
/* DTPREL32 relocations just involve the symbol value; no other
@@ -652,7 +661,7 @@ mips_arch_prelink_conflict (DSO *dso, struct prelink_info *info)
struct prelink_conflict *conflict;
GElf_Rela *entry;
- if (dso->info[DT_PLTGOT] == 0)
+ if (info->dso == dso || dso->info[DT_PLTGOT] == 0)
return 0;
/* Add a conflict for every global GOT entry that does not hold the
@@ -685,7 +694,7 @@ mips_arch_prelink_conflict (DSO *dso, struct prelink_info *info)
static int
mips_apply_conflict_rela (struct prelink_info *info, GElf_Rela *rela,
- char *buf)
+ char *buf, GElf_Addr dest_addr)
{
switch (GELF_R_TYPE (rela->r_info))
{