Updates and adds tests for i386/ELF JITLink backend
authorKshitij Jain <jkshtj@outlook.com>
Sun, 20 Nov 2022 04:09:29 +0000 (04:09 +0000)
committerKshitij Jain <jkshtj@outlook.com>
Sun, 25 Dec 2022 02:06:09 +0000 (02:06 +0000)
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

llvm/test/ExecutionEngine/JITLink/i386/ELF_i386_absolute_relocations_16.s [new file with mode: 0644]
llvm/test/ExecutionEngine/JITLink/i386/ELF_i386_absolute_relocations_32.s
llvm/test/ExecutionEngine/JITLink/i386/ELF_i386_pc_relative_relocations_32.s

diff --git a/llvm/test/ExecutionEngine/JITLink/i386/ELF_i386_absolute_relocations_16.s b/llvm/test/ExecutionEngine/JITLink/i386/ELF_i386_absolute_relocations_16.s
new file mode 100644 (file)
index 0000000..47142c4
--- /dev/null
@@ -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
\ No newline at end of file
index 40cb8d4..e4b02a7 100644 (file)
@@ -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
\ No newline at end of file
+# jitlink-check: decode_operand(foo, 0) = external_data
+        .globl  foo     
+        .p2align        4, 0x90
+        .type   foo,@function
+foo:
+        movl    external_data, %eax
+        .size   foo, .-foo
\ No newline at end of file
index 38be68a..df74c7b 100644 (file)
@@ -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
\ No newline at end of file
+
+# 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
\ No newline at end of file