Skip to content

Commit

Permalink
Updates and adds tests for i386/ELF JITLink backend
Browse files Browse the repository at this point in the history
This CR modifies the existing 32 bit pcrel relocation test to
include the case when the relocation target might be present at
a smaller address than the address of the location that needs to be
patched.

Additionally, it adds a test for 16 bit absolute relocation.

Reviewed By: sunho

Differential Revision: https://reviews.llvm.org/D138372
  • Loading branch information
jkshtj committed Dec 25, 2022
1 parent 066b492 commit 03ed35b
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 35 deletions.
@@ -0,0 +1,25 @@
# RUN: llvm-mc -triple=i386-unknown-linux-gnu -filetype=obj --show-encoding --show-inst -o %t.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 1Kb -slab-address 0x1 -slab-page-size 4096 \
# RUN: -abs external_data=0x32 \
# RUN: -check %s %t.o
#
# Test ELF 16 bit absolute relocations

.text
.code16

.globl main
.align 2, 0x90
.type main,@function
main:
ret
.size main, .-main

# jitlink-check: decode_operand(bar, 0) = external_data
.globl bar
.align 2, 0x90
.type bar,@function
bar:
retw $external_data
.size bar, .-bar
@@ -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
@@ -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

0 comments on commit 03ed35b

Please sign in to comment.