From 5091f93cddc8831d6248b51a30694cb4b37b9930 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 3 Apr 2014 02:20:43 +0000 Subject: Only clear the thumb bit from function addresses. llvm-svn: 205500 --- llvm/include/llvm/Object/ELFObjectFile.h | 3 ++- llvm/test/Object/Inputs/thumb-symbols.elf.arm | Bin 0 -> 481 bytes llvm/test/Object/nm-trivial-object.test | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 llvm/test/Object/Inputs/thumb-symbols.elf.arm diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index e2c5fc77fc4..9bdee9f5694 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -292,7 +292,8 @@ error_code ELFObjectFile::getSymbolAddress(DataRefImpl Symb, Result = ESym->st_value; // Clear the ARM/Thumb indicator flag. - if (Header->e_machine == ELF::EM_ARM) + if (EF.getHeader()->e_machine == ELF::EM_ARM && + ESym->getType() == ELF::STT_FUNC) Result &= ~1; if (Header->e_type == ELF::ET_REL) diff --git a/llvm/test/Object/Inputs/thumb-symbols.elf.arm b/llvm/test/Object/Inputs/thumb-symbols.elf.arm new file mode 100644 index 00000000000..923eef6cede Binary files /dev/null and b/llvm/test/Object/Inputs/thumb-symbols.elf.arm differ diff --git a/llvm/test/Object/nm-trivial-object.test b/llvm/test/Object/nm-trivial-object.test index ee0c3ffd8e1..4e90f9609c6 100644 --- a/llvm/test/Object/nm-trivial-object.test +++ b/llvm/test/Object/nm-trivial-object.test @@ -18,6 +18,9 @@ RUN: llvm-nm %p/Inputs/common.coff-i386 \ RUN: | FileCheck %s -check-prefix COFF-COMMON RUN: llvm-nm %p/Inputs/relocatable-with-section-address.elf-x86-64 \ RUN: | FileCheck %s -check-prefix ELF-SEC-ADDR +RUN: llvm-nm %p/Inputs/thumb-symbols.elf.arm \ +RUN: | FileCheck %s -check-prefix ELF-THUMB + COFF: 00000000 d .data COFF: 00000000 t .text @@ -64,3 +67,8 @@ ELF-SEC-ADDR-NEXT: 0000005c D b ELF-SEC-ADDR-NEXT: 00000040 T f ELF-SEC-ADDR-NEXT: 00000050 T g ELF-SEC-ADDR-NEXT: 00000060 D p + + +Test that we drop the thumb bit only from function addresses. +ELF-THUMB: 00000000 t f +ELF-THUMB: 00000003 t g -- cgit v1.2.3