Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
# RUN: llvm-mc -triple=i386-unknown-linux-gnu -filetype=obj -o %t.o %s
# RUN: llvm-jitlink -noexec %t.o
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
# RUN: -abs external_data=0x100 \
# RUN: -check %s %t.o

# Test ELF 32 bit absolute relocations

.text
.globl main
.p2align 4
.globl main
.p2align 4, 0x90
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
pushl %eax
movl $0, -4(%ebp)
movl a, %eax
addl $4, %esp
popl %ebp
retl

main:
retl
.size main, .-main

.data
.p2align 2
.type a,@object
a:
.long 42
.size a, 4
# jitlink-check: decode_operand(foo, 0) = external_data
.globl foo
.p2align 4, 0x90
.type foo,@function
foo:
movl external_data, %eax
.size foo, .-foo
Original file line number Diff line number Diff line change
@@ -1,31 +1,49 @@
# RUN: llvm-mc -triple=i386-unknown-linux-gnu -filetype=obj -o %t.o %s
# RUN: llvm-jitlink -noexec %t.o
# RUN: llvm-jitlink -noexec \
# RUN: -check %s %t.o
#
# Test ELF 32 bit pc relative relocations

.text
.section .text.main

.globl main
.p2align 4
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl $0, -4(%ebp)
calll foo
addl $8, %esp
popl %ebp
retl

.size main, .-main

.section .text.foo

# Tests PC relative relocation for positive offset from PC
# jitlink-check: decode_operand(bar, 0) = foo - next_pc(bar)

.globl bar
.p2align 4
.type bar,@function
bar:
calll foo
.size bar, .-bar

.globl foo
.p2align 4
.type foo,@function
foo:
pushl %ebp
movl %esp, %ebp
movl $42, %eax
popl %ebp
retl
.size foo, .-foo

.size foo, .-foo

# Tests PC relative relocation for negative offset from PC
# jitlink-check: decode_operand(baz, 0) = fooz - next_pc(baz)
.globl fooz
.p2align 4
.type fooz,@function
fooz:
retl
.size fooz, .-fooz

.globl baz
.p2align 4
.type baz,@function
baz:
calll fooz
.size baz, .-baz
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# RUN: rm -rf %t && mkdir -p %t
# RUN: llvm-mc -triple=i386-unknown-linux-gnu -position-independent \
# RUN: -filetype=obj -o %t/elf_sm_pic_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
# RUN: -check %s %t/elf_sm_pic_reloc.o
#
# Test ELF small/PIC relocations.

.text
.globl main
.p2align 4, 0x90
.type main,@function
main:
ret
.size main, .-main


# Test GOT32 handling.
#
# We want to check both the offset to the GOT entry and its contents.
# jitlink-check: decode_operand(test_got, 4) = got_addr(elf_sm_pic_reloc.o, named_data1) - _GLOBAL_OFFSET_TABLE_
# jitlink-check: *{4}(got_addr(elf_sm_pic_reloc.o, named_data1)) = named_data1
#
# jitlink-check: decode_operand(test_got+6, 4) = got_addr(elf_sm_pic_reloc.o, named_data2) - _GLOBAL_OFFSET_TABLE_
# jitlink-check: *{4}(got_addr(elf_sm_pic_reloc.o, named_data2)) = named_data2

.globl test_got
.p2align 4, 0x90
.type test_got,@function
test_got:
leal named_data1@GOT, %eax
leal named_data2@GOT, %eax
.size test_got, .-test_got



# Test GOTOFF64 handling.
# jitlink-check: decode_operand(test_gotoff, 1) = named_func - _GLOBAL_OFFSET_TABLE_
.globl test_gotoff
.p2align 4, 0x90
.type test_gotoff,@function
test_gotoff:
mov $named_func@GOTOFF, %eax
.size test_gotoff, .-test_gotoff


.globl named_func
.p2align 4, 0x90
.type named_func,@function
named_func:
xor %eax, %eax
.size named_func, .-named_func


.data

.type named_data1,@object
.p2align 3
named_data1:
.quad 42
.size named_data1, 8

.type named_data2,@object
.p2align 3
named_data2:
.quad 42
.size named_data2, 8