macho: relocations

This commit is contained in:
Philip Craig
2023-10-23 16:31:06 +10:00
parent 1fd5fb4b4e
commit 591b2536d8
9 changed files with 144 additions and 0 deletions
Binary file not shown.
+35
View File
@@ -0,0 +1,35 @@
.subsections_via_symbols
.text
// ARM64_RELOC_BRANCH26
bl _g0
// ARM64_RELOC_ADDEND, ARM64_RELOC_BRANCH26
bl _g0 + 20
// ARM64_RELOC_PAGE21
adrp x0, _g0@PAGE
// ARM64_RELOC_PAGEOFF12
ldr w0, [x0, _g0@PAGEOFF]
// ARM64_RELOC_ADDEND, ARM64_RELOC_PAGE21
adrp x0, _g0@PAGE + 20
// ARM64_RELOC_ADDEND, ARM64_RELOC_PAGEOFF12
ldr w0, [x0, _g0@PAGEOFF + 20]
// ARM64_RELOC_GOT_LOAD_PAGE21
adrp x0, _g0@GOTPAGE
// ARM64_RELOC_GOT_LOAD_PAGEOFF12
ldr w0, [x0, _g0@GOTPAGEOFF]
// ARM64_RELOC_TLVP_LOAD_PAGE21
adrp x0, _g0@TLVPPAGE
// ARM64_RELOC_TLVP_LOAD_PAGEOFF12
ldr w0, [x0, _g0@TLVPPAGEOFF]
.data
_data:
// ARM64_RELOC_UNSIGNED
.quad _g0 + 20
// ARM64_RELOC_SUBTRACTOR, ARM64_RELOC_UNSIGNED, length=3
.quad _g0 - _g1 + 20
// ARM64_RELOC_SUBTRACTOR, ARM64_RELOC_UNSIGNED, length=2
.long _g0 - _g1 + 20
// ARM64_RELOC_POINTER_TO_GOT, pcrel=0, length=3
.quad _g0@GOT
// ARM64_RELOC_POINTER_TO_GOT, pcrel=1, length=2
.long _g0@GOT - .
BIN
View File
Binary file not shown.
+43
View File
@@ -0,0 +1,43 @@
.subsections_via_symbols
.text
.arm
_g1:
// ARM_RELOC_BR24, extern=1
bl _g0 + 20
// ARM_RELOC_BR24, extern=0
bl _g2
// ARM_RELOC_BR24, scattered
bl _g2 + 20
// ARM_RELOC_HALF, length=0
movw r0, :lower16:(_g0 + 20)
// ARM_RELOC_HALF, length=1
movt r0, :upper16:(_g0 + 20)
.p2align 2
.globl _g2
.thumb
_g2:
_g3:
// ARM_THUMB_RELOC_BR22, extern=1
bl _g0 + 20
// ARM_THUMB_RELOC_BR22, extern=0
bl _g2
// ARM_THUMB_RELOC_BR22, scattered
bl _g2 + 20
// ARM_RELOC_HALF, length=2
movw r0, :lower16:(_g0 + 20)
// ARM_RELOC_HALF, length=3
movt r0, :upper16:(_g0 + 20)
.data
// ARM_RELOC_VANILLA, extern=1
.long _g0 + 20
// ARM_RELOC_VANILLA, extern=0
.long _g2
// ARM_RELOC_VANILLA, scattered
.long _g2 + 20
// ARM_RELOC_SECTDIFF, ARM_RELOC_PAIR
.long _g2 - _g1 + 20
// ARM_RELOC_SECTDIFF, ARM_RELOC_PAIR
// TODO: should be ARM_RELOC_LOCAL_SECTDIFF, ARM_RELOC_PAIR?
.long _g3 - _g1 + 20
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
.subsections_via_symbols
.text
_g1:
// GENERIC_RELOC_VANILLA, pcrel=1, extern=1
call _g0 + 20
// GENERIC_RELOC_VANILLA, pcrel=1, extern=0
call _g2
// GENERIC_RELOC_VANILLA, pcrel=1, scattered
call _g2 + 20
.p2align 2
.globl _g2
_g2:
_g3:
ret
.data
// GENERIC_RELOC_VANILLA, pcrel=0, extern=1
.long _g0 + 20
// GENERIC_RELOC_VANILLA, pcrel=0, extern=0
.long _g2
// GENERIC_RELOC_VANILLA, pcrel=0, scattered
.long _g2 + 20
// GENERIC_RELOC_SECTDIFF, GENERIC_RELOC_PAIR
.long _g2 - _g1 + 20
// GENERIC_RELOC_LOCAL_SECTDIFF, GENERIC_RELOC_PAIR
.long _g3 - _g1 + 20
Binary file not shown.
+34
View File
@@ -0,0 +1,34 @@
.text
_g1:
// X86_64_RELOC_BRANCH
call _g2 + 20
_g2:
// X86_64_RELOC_SIGNED
movl _g1 + 20(%rip), %eax
// X86_64_RELOC_SIGNED_1, extern=1
movb $0x12, _g1(%rip)
// X86_64_RELOC_SIGNED_2, extern=1
movw $0x1234, _g1(%rip)
// X86_64_RELOC_SIGNED_4, extern=1
movl $0x12345678, _g1(%rip)
// X86_64_RELOC_SIGNED_1, extern=0
movb $0x12, L1(%rip)
// X86_64_RELOC_SIGNED_2, extern=0
movw $0x1234, L1(%rip)
// X86_64_RELOC_SIGNED_4, extern=0
movl $0x12345678, L1(%rip)
// X86_64_RELOC_GOT_LOAD
movq _g1@GOTPCREL(%rip), %rax
// X86_64_RELOC_GOT
pushq _g1@GOTPCREL(%rip)
// X86_64_RELOC_TLV
movq _g1@TLVP(%rip), %rax
.data
L1:
// X86_64_RELOC_UNSIGNED, extern=1
.quad _g1 + 20
// X86_64_RELOC_UNSIGNED, extern=0
.quad L1 + 20
// X86_64_RELOC_UNSIGNED, X86_64_RELOC_SUBTRACTOR
.quad _g1 - _g2 + 20
Executable
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
llvm-mc-16 -n -triple i386-apple-darwin reloc-i386.s -filetype=obj -o reloc-i386.o
llvm-mc-16 -n -triple x86_64-apple-darwin reloc-x86_64.s -filetype=obj -o reloc-x86_64.o
llvm-mc-16 -n -triple thumbv7-apple-darwin reloc-arm.s -filetype=obj -o reloc-arm.o
llvm-mc-16 -n -triple arm64-apple-darwin reloc-aarch64.s -filetype=obj -o reloc-aarch64.o