From 56865130d06d032b2c44b188eb841d481a3d0bad Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Thu, 21 Sep 2006 18:21:19 +0000 Subject: [PATCH] * sysdeps/arm/dl-machine.h (elf_machine_rel): Handle undefined symbols. (elf_machine_rela): Likewise. --- ChangeLog.arm | 6 ++++++ sysdeps/arm/dl-machine.h | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog.arm b/ChangeLog.arm index 8702925..3effa9d 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,9 @@ +2006-09-21 Daniel Jacobowitz + + * sysdeps/arm/dl-machine.h (elf_machine_rel): Handle undefined + symbols. + (elf_machine_rela): Likewise. + 2006-08-21 Daniel Jacobowitz * sysdeps/unix/sysv/linux/arm/eabi/syscalls.list: Remove msgctl, diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index ff8a170..1a45a26 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -447,12 +447,16 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, break; case R_ARM_TLS_DTPOFF32: - *reloc_addr += sym->st_value; + if (sym != NULL) + *reloc_addr += sym->st_value; break; case R_ARM_TLS_TPOFF32: - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr += sym->st_value + sym_map->l_tls_offset; + if (sym != NULL) + { + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr += sym->st_value + sym_map->l_tls_offset; + } break; #endif default: @@ -544,13 +548,16 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, break; case R_ARM_TLS_DTPOFF32: - *reloc_addr = sym->st_value + reloc->r_addend; + *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; break; case R_ARM_TLS_TPOFF32: - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = (sym->st_value + sym_map->l_tls_offset - + reloc->r_addend); + if (sym != NULL) + { + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr = (sym->st_value + sym_map->l_tls_offset + + reloc->r_addend); + } break; #endif default: -- 2.7.4