From: Rafael Espindola Date: Thu, 3 Apr 2014 02:20:43 +0000 (+0000) Subject: Only clear the thumb bit from function addresses. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ee2bf5b6077315359af175c7ee5ae580002637a3;p=oota-llvm.git Only clear the thumb bit from function addresses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205500 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index e2c5fc77fc4..9bdee9f5694 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/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/test/Object/Inputs/thumb-symbols.elf.arm b/test/Object/Inputs/thumb-symbols.elf.arm new file mode 100644 index 00000000000..923eef6cede Binary files /dev/null and b/test/Object/Inputs/thumb-symbols.elf.arm differ diff --git a/test/Object/nm-trivial-object.test b/test/Object/nm-trivial-object.test index ee0c3ffd8e1..4e90f9609c6 100644 --- a/test/Object/nm-trivial-object.test +++ b/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