summaryrefslogtreecommitdiff
path: root/sysdeps/arm/dl-machine.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-12-08 07:38:14 +0000
committerUlrich Drepper <drepper@redhat.com>1999-12-08 07:38:14 +0000
commit841ea81647a7b5ea852d039fa367bf687e59ace6 (patch)
treeab6badaf37f9d8bdd9266f96d10fceb1ec1b6149 /sysdeps/arm/dl-machine.h
parent3b187ccb86c5ad5fe969f788d8a635e9f7bbdc5f (diff)
Update.
1999-12-07 Scott Bambrough <scottb@netwinder.org> * sysdeps/arm/dl-machine.h (elf_machine_rel): Fixup R_ARM_PC24 relocs if possible. 1999-12-06 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/setrlimit.c: First find out wether the ugetrlimit syscall exists. * sysdeps/unix/sysv/linux/getrlimit.c: Only put versions on exported symbols. * sysdeps/unix/sysv/linux/setrlimit.c: Likewise.
Diffstat (limited to 'sysdeps/arm/dl-machine.h')
-rw-r--r--sysdeps/arm/dl-machine.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index 25e2f06321..2e6faf5d51 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -443,6 +443,23 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
*reloc_addr += value;
break;
}
+ case R_ARM_PC24:
+ {
+ signed int addend;
+
+ addend = *reloc_addr & 0x00ffffff;
+ if (addend & 0x00800000) addend |= 0xff000000;
+
+ value = value - (unsigned int)reloc_addr + (addend << 2);
+ if (value & 0xfc000003)
+ _dl_signal_error (0, map->l_name,
+ "R_ARM_PC24 relocation out of range");
+
+ value = value >> 2;
+ value = (*reloc_addr & 0xff000000) | (value & 0x00ffffff);
+ *reloc_addr = value;
+ }
+ break;
default:
_dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 0);
break;