mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-30 15:32:52 +01:00
2dbbd221f7
Before this patch, when you objdump an LLVM-compiled file, objdump tried to decode data-in-code sections as if they were code. This patch adds the missing Mapping Symbols, as defined by "ELF for the ARM Architecture" (ARM IHI 0044D). Patch based on work by Greg Fitzgerald. llvm-svn: 169609
71 lines
2.6 KiB
LLVM
71 lines
2.6 KiB
LLVM
;; RUN: llc -mtriple=armv7-linux-gnueabi -O3 \
|
|
;; RUN: -mcpu=cortex-a8 -mattr=-neon -mattr=+vfp2 -arm-reserve-r9 \
|
|
;; RUN: -filetype=obj %s -o - | \
|
|
;; RUN: elf-dump --dump-section-data | FileCheck -check-prefix=OBJ %s
|
|
|
|
;; FIXME: This file needs to be in .s form!
|
|
;; The args to llc are there to constrain the codegen only.
|
|
;;
|
|
;; Ensure no regression on ARM/gcc compatibility for
|
|
;; emitting explicit symbol relocs for nonexternal symbols
|
|
;; versus section symbol relocs (with offset) -
|
|
;;
|
|
;; Default llvm behavior is to emit as section symbol relocs nearly
|
|
;; everything that is not an undefined external. Unfortunately, this
|
|
;; diverges from what codesourcery ARM/gcc does!
|
|
;;
|
|
;; Tests that reloc to _MergedGlobals show up as explicit symbol reloc
|
|
|
|
|
|
target triple = "armv7-none-linux-gnueabi"
|
|
|
|
@var_tls = thread_local global i32 1
|
|
@var_tls_double = thread_local global double 1.000000e+00
|
|
@var_static = internal global i32 1
|
|
@var_static_double = internal global double 1.000000e+00
|
|
@var_global = global i32 1
|
|
@var_global_double = global double 1.000000e+00
|
|
|
|
declare i32 @mystrlen(i8* nocapture %s) nounwind
|
|
|
|
declare void @myhextochar(i32 %n, i8* nocapture %buffer)
|
|
|
|
declare void @__aeabi_read_tp() nounwind
|
|
|
|
declare void @__nacl_read_tp() nounwind
|
|
|
|
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind {
|
|
entry:
|
|
switch i32 %argc, label %bb3 [
|
|
i32 555, label %bb
|
|
i32 6666, label %bb2
|
|
]
|
|
|
|
bb: ; preds = %entry
|
|
store volatile i32 11, i32* @var_tls, align 4
|
|
store volatile double 2.200000e+01, double* @var_tls_double, align 8
|
|
store volatile i32 33, i32* @var_static, align 4
|
|
store volatile double 4.400000e+01, double* @var_static_double, align 8
|
|
store volatile i32 55, i32* @var_global, align 4
|
|
store volatile double 6.600000e+01, double* @var_global_double, align 8
|
|
br label %bb3
|
|
|
|
bb2: ; preds = %entry
|
|
ret i32 add (i32 add (i32 add (i32 ptrtoint (i32* @var_tls to i32), i32 add (i32 ptrtoint (i32* @var_static to i32), i32 ptrtoint (i32* @var_global to i32))), i32 ptrtoint (double* @var_tls_double to i32)), i32 add (i32 ptrtoint (double* @var_static_double to i32), i32 ptrtoint (double* @var_global_double to i32)))
|
|
|
|
bb3: ; preds = %bb, %entry
|
|
tail call void @exit(i32 55) noreturn nounwind
|
|
unreachable
|
|
}
|
|
|
|
declare void @exit(i32) noreturn nounwind
|
|
|
|
;; OBJ: Relocation 1
|
|
;; OBJ-NEXT: 'r_offset',
|
|
;; OBJ-NEXT: 'r_sym', 0x000007
|
|
;; OBJ-NEXT: 'r_type', 0x2b
|
|
|
|
;; OBJ: Symbol 7
|
|
;; OBJ-NEXT: '_MergedGlobals'
|
|
;; OBJ-NEXT: 'st_value', 0x00000010
|