summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-04-03 18:31:12 +0000
committerEric Christopher <echristo@gmail.com>2013-04-03 18:31:12 +0000
commitd5972ea8fc02ae9e113566fb1b22bc64ea5f2599 (patch)
tree334d7ad873e1d0769fd2d5bb13ce284985b5b8df /llvm
parentc3d3f9b66ec4a5abf6bf82f32f62e09fc1089def (diff)
downloadbcm5719-llvm-d5972ea8fc02ae9e113566fb1b22bc64ea5f2599.tar.gz
bcm5719-llvm-d5972ea8fc02ae9e113566fb1b22bc64ea5f2599.zip
When dumping clear the arm/thumb flag for now.
Patch by Nico Rieck! llvm-svn: 178676
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Object/ELF.h5
-rw-r--r--llvm/test/Object/ARM/symbol-addr.ll12
2 files changed, 17 insertions, 0 deletions
diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h
index b0d8663b7d9..fa75053f0a4 100644
--- a/llvm/include/llvm/Object/ELF.h
+++ b/llvm/include/llvm/Object/ELF.h
@@ -1058,6 +1058,11 @@ error_code ELFObjectFile<ELFT>::getSymbolAddress(DataRefImpl Symb,
IsRelocatable = true;
}
Result = symb->st_value;
+
+ // Clear the ARM/Thumb indicator flag.
+ if (Header->e_machine == ELF::EM_ARM)
+ Result &= ~1;
+
if (IsRelocatable && Section != 0)
Result += Section->sh_addr;
return object_error::success;
diff --git a/llvm/test/Object/ARM/symbol-addr.ll b/llvm/test/Object/ARM/symbol-addr.ll
new file mode 100644
index 00000000000..6bcbde9f9f1
--- /dev/null
+++ b/llvm/test/Object/ARM/symbol-addr.ll
@@ -0,0 +1,12 @@
+; RUN: llc %s -mtriple=arm-unknown-unknown -filetype=obj -o - \
+; RUN: | llvm-objdump -t - | FileCheck %s
+; RUN: llc %s -mtriple=thumb-unknown-unknown -filetype=obj -o - \
+; RUN: | llvm-objdump -t - | FileCheck %s
+
+; Check that the symbol address does not include the ARM/Thumb instruction
+; indicator bit.
+; CHECK: 00000000 g F .text {{[0-9]+}} test
+
+define i32 @test() {
+ ret i32 1
+}
OpenPOWER on IntegriCloud