]>
Commit | Line | Data |
---|---|---|
c0c7ef32 AM |
1 | diff -dur glibc-2.11.backup/sysdeps/arm/dl-machine.h glibc-2.11/sysdeps/arm/dl-machine.h |
2 | --- glibc-2.11.backup/sysdeps/arm/dl-machine.h 2009-11-10 08:12:18.000000000 +0100 | |
3 | +++ glibc-2.11/sysdeps/arm/dl-machine.h 2009-11-11 10:07:48.030872826 +0100 | |
fb4d8577 | 4 | @@ -585,13 +585,22 @@ |
5 | } | |
6 | # endif | |
7 | ||
8 | +union arm_unaligned_data { | |
9 | + Elf32_Addr l_addr; | |
10 | +} __attribute__ ((packed)); | |
11 | + | |
12 | auto inline void | |
13 | __attribute__ ((always_inline)) | |
14 | elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc, | |
15 | void *const reloc_addr_arg) | |
16 | { | |
17 | - Elf32_Addr *const reloc_addr = reloc_addr_arg; | |
18 | - *reloc_addr += l_addr; | |
19 | + if (((long)reloc_addr_arg) & 0x3) { | |
20 | + union arm_unaligned_data *const lpdata = reloc_addr_arg; | |
21 | + lpdata->l_addr += l_addr; | |
22 | + } else { | |
23 | + Elf32_Addr *const reloc_addr = reloc_addr_arg; | |
24 | + *reloc_addr += l_addr; | |
25 | + } | |
26 | } | |
27 | ||
28 | # ifndef RTLD_BOOTSTRAP |