summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-04-03 02:20:43 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-04-03 02:20:43 +0000
commit5091f93cddc8831d6248b51a30694cb4b37b9930 (patch)
tree0787f6c512d5b5d31f3dd548f6b97f38a1879fde
parent2a579bcc8e189a1047d96c9d80c3107606e616c8 (diff)
downloadbcm5719-llvm-5091f93cddc8831d6248b51a30694cb4b37b9930.tar.gz
bcm5719-llvm-5091f93cddc8831d6248b51a30694cb4b37b9930.zip
Only clear the thumb bit from function addresses.
llvm-svn: 205500
-rw-r--r--llvm/include/llvm/Object/ELFObjectFile.h3
-rw-r--r--llvm/test/Object/Inputs/thumb-symbols.elf.armbin0 -> 481 bytes
-rw-r--r--llvm/test/Object/nm-trivial-object.test8
3 files changed, 10 insertions, 1 deletions
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<ELFT>::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
--- /dev/null
+++ b/llvm/test/Object/Inputs/thumb-symbols.elf.arm
Binary files 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
OpenPOWER on IntegriCloud