315 lines · plain
1// RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs - | FileCheck %s2 3// These examples are taken from <mach-o/x86_64/reloc.h>.4 5 .data6 .long 07 8 .text9_foo:10 ret11 12_baz:13 call _foo14 call _foo+415 movq _foo@GOTPCREL(%rip), %rax16 pushq _foo@GOTPCREL(%rip)17 movl _foo(%rip), %eax18 movl _foo+4(%rip), %eax19 movb $0x12, _foo(%rip)20 movl $0x12345678, _foo(%rip)21 .quad _foo22_bar:23 .quad _foo+424 .quad _foo - _bar25 .quad _foo - _bar + 426 .long _foo - _bar27 leaq L1(%rip), %rax28 leaq L0(%rip), %rax29 addl $6,L0(%rip)30 addw $500,L0(%rip)31 addl $500,L0(%rip)32 33_prev:34 .space 12,0x9035 .quad L136L0:37 .quad L038L_pc:39 .quad _foo - L_pc40 .quad _foo - L141L1:42 .quad L1 - _prev43 44 .data45.long _foobar@GOTPCREL+446.long _foo@GOTPCREL+447 48 .section __DWARF,__debug_frame,regular,debug49 .quad L150 .quad _ext_foo51 52// Make sure local label which overlaps with non-local one is assigned to the53// right atom.54 .text55_f2:56L2_0:57 addl $0, %eax58L2_1: 59_f3:60 addl L2_1 - L2_0, %eax61 62 .data63L4: 64 .long 065 .text66 movl L4(%rip), %eax67 68 .section __TEXT,__literal8,8byte_literals69 .quad 070L5: 71 .quad 072f6:73 .quad 074L6:75 .quad 076 77 .text78 movl L5(%rip), %eax79 movl f6(%rip), %eax80 movl L6(%rip), %eax81 82 .data83 .quad L584 .quad f685 .quad L686 87 .text88 cmpq $0, _foo@GOTPCREL(%rip)89 90// CHECK: Relocations [91// CHECK-NEXT: Section __data {92// CHECK-NEXT: Relocation {93// CHECK-NEXT: Offset: 0x2094// CHECK-NEXT: PCRel: 095// CHECK-NEXT: Length: 396// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)97// CHECK-NEXT: Section: __literal898// CHECK-NEXT: }99// CHECK-NEXT: Relocation {100// CHECK-NEXT: Offset: 0x18101// CHECK-NEXT: PCRel: 0102// CHECK-NEXT: Length: 3103// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)104// CHECK-NEXT: Symbol: f6105// CHECK-NEXT: }106// CHECK-NEXT: Relocation {107// CHECK-NEXT: Offset: 0x10108// CHECK-NEXT: PCRel: 0109// CHECK-NEXT: Length: 3110// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)111// CHECK-NEXT: Section: __literal8112// CHECK-NEXT: }113// CHECK-NEXT: Relocation {114// CHECK-NEXT: Offset: 0x8115// CHECK-NEXT: PCRel: 1116// CHECK-NEXT: Length: 2117// CHECK-NEXT: Type: X86_64_RELOC_GOT (4)118// CHECK-NEXT: Symbol: _foo119// CHECK-NEXT: }120// CHECK-NEXT: Relocation {121// CHECK-NEXT: Offset: 0x4122// CHECK-NEXT: PCRel: 1123// CHECK-NEXT: Length: 2124// CHECK-NEXT: Type: X86_64_RELOC_GOT (4)125// CHECK-NEXT: Symbol: _foobar126// CHECK-NEXT: }127// CHECK-NEXT: }128// CHECK-NEXT: Section __text {129// CHECK-NEXT: Relocation {130// CHECK-NEXT: Offset: 0xDA131// CHECK-NEXT: PCRel: 1132// CHECK-NEXT: Length: 2133// CHECK-NEXT: Type: X86_64_RELOC_GOT (4)134// CHECK-NEXT: Symbol: _foo135// CHECK-NEXT: }136// CHECK-NEXT: Relocation {137// CHECK-NEXT: Offset: 0xD3138// CHECK-NEXT: PCRel: 1139// CHECK-NEXT: Length: 2140// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)141// CHECK-NEXT: Section: __literal8142// CHECK-NEXT: }143// CHECK-NEXT: Relocation {144// CHECK-NEXT: Offset: 0xCD145// CHECK-NEXT: PCRel: 1146// CHECK-NEXT: Length: 2147// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)148// CHECK-NEXT: Symbol: f6149// CHECK-NEXT: }150// CHECK-NEXT: Relocation {151// CHECK-NEXT: Offset: 0xC7152// CHECK-NEXT: PCRel: 1153// CHECK-NEXT: Length: 2154// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)155// CHECK-NEXT: Section: __literal8156// CHECK-NEXT: }157// CHECK-NEXT: Relocation {158// CHECK-NEXT: Offset: 0xC1159// CHECK-NEXT: PCRel: 1160// CHECK-NEXT: Length: 2161// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)162// CHECK-NEXT: Section: __data163// CHECK-NEXT: }164// CHECK-NEXT: Relocation {165// CHECK-NEXT: Offset: 0xA5166// CHECK-NEXT: PCRel: 0167// CHECK-NEXT: Length: 3168// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)169// CHECK-NEXT: Symbol: _prev170// CHECK-NEXT: }171// CHECK-NEXT: Relocation {172// CHECK-NEXT: Offset: 0xA5173// CHECK-NEXT: PCRel: 0174// CHECK-NEXT: Length: 3175// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)176// CHECK-NEXT: Symbol: _foo177// CHECK-NEXT: }178// CHECK-NEXT: Relocation {179// CHECK-NEXT: Offset: 0x95180// CHECK-NEXT: PCRel: 0181// CHECK-NEXT: Length: 3182// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)183// CHECK-NEXT: Symbol: _prev184// CHECK-NEXT: }185// CHECK-NEXT: Relocation {186// CHECK-NEXT: Offset: 0x8D187// CHECK-NEXT: PCRel: 0188// CHECK-NEXT: Length: 3189// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)190// CHECK-NEXT: Symbol: _prev191// CHECK-NEXT: }192// CHECK-NEXT: Relocation {193// CHECK-NEXT: Offset: 0x79194// CHECK-NEXT: PCRel: 1195// CHECK-NEXT: Length: 2196// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8)197// CHECK-NEXT: Symbol: _prev198// CHECK-NEXT: }199// CHECK-NEXT: Relocation {200// CHECK-NEXT: Offset: 0x71201// CHECK-NEXT: PCRel: 1202// CHECK-NEXT: Length: 2203// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_2 (7)204// CHECK-NEXT: Symbol: _prev205// CHECK-NEXT: }206// CHECK-NEXT: Relocation {207// CHECK-NEXT: Offset: 0x69208// CHECK-NEXT: PCRel: 1209// CHECK-NEXT: Length: 2210// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6)211// CHECK-NEXT: Symbol: _prev212// CHECK-NEXT: }213// CHECK-NEXT: Relocation {214// CHECK-NEXT: Offset: 0x63215// CHECK-NEXT: PCRel: 1216// CHECK-NEXT: Length: 2217// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)218// CHECK-NEXT: Symbol: _prev219// CHECK-NEXT: }220// CHECK-NEXT: Relocation {221// CHECK-NEXT: Offset: 0x5C222// CHECK-NEXT: PCRel: 1223// CHECK-NEXT: Length: 2224// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)225// CHECK-NEXT: Symbol: _prev226// CHECK-NEXT: }227// CHECK-NEXT: Relocation {228// CHECK-NEXT: Offset: 0x3D229// CHECK-NEXT: PCRel: 0230// CHECK-NEXT: Length: 3231// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)232// CHECK-NEXT: Symbol: _foo233// CHECK-NEXT: }234// CHECK-NEXT: Relocation {235// CHECK-NEXT: Offset: 0x35236// CHECK-NEXT: PCRel: 0237// CHECK-NEXT: Length: 3238// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)239// CHECK-NEXT: Symbol: _foo240// CHECK-NEXT: }241// CHECK-NEXT: Relocation {242// CHECK-NEXT: Offset: 0x2D243// CHECK-NEXT: PCRel: 1244// CHECK-NEXT: Length: 2245// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8)246// CHECK-NEXT: Symbol: _foo247// CHECK-NEXT: }248// CHECK-NEXT: Relocation {249// CHECK-NEXT: Offset: 0x26250// CHECK-NEXT: PCRel: 1251// CHECK-NEXT: Length: 2252// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6)253// CHECK-NEXT: Symbol: _foo254// CHECK-NEXT: }255// CHECK-NEXT: Relocation {256// CHECK-NEXT: Offset: 0x20257// CHECK-NEXT: PCRel: 1258// CHECK-NEXT: Length: 2259// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)260// CHECK-NEXT: Symbol: _foo261// CHECK-NEXT: }262// CHECK-NEXT: Relocation {263// CHECK-NEXT: Offset: 0x1A264// CHECK-NEXT: PCRel: 1265// CHECK-NEXT: Length: 2266// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)267// CHECK-NEXT: Symbol: _foo268// CHECK-NEXT: }269// CHECK-NEXT: Relocation {270// CHECK-NEXT: Offset: 0x14271// CHECK-NEXT: PCRel: 1272// CHECK-NEXT: Length: 2273// CHECK-NEXT: Type: X86_64_RELOC_GOT (4)274// CHECK-NEXT: Symbol: _foo275// CHECK-NEXT: }276// CHECK-NEXT: Relocation {277// CHECK-NEXT: Offset: 0xE278// CHECK-NEXT: PCRel: 1279// CHECK-NEXT: Length: 2280// CHECK-NEXT: Type: X86_64_RELOC_GOT_LOAD (3)281// CHECK-NEXT: Symbol: _foo282// CHECK-NEXT: }283// CHECK-NEXT: Relocation {284// CHECK-NEXT: Offset: 0x7285// CHECK-NEXT: PCRel: 1286// CHECK-NEXT: Length: 2287// CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2)288// CHECK-NEXT: Symbol: _foo289// CHECK-NEXT: }290// CHECK-NEXT: Relocation {291// CHECK-NEXT: Offset: 0x2292// CHECK-NEXT: PCRel: 1293// CHECK-NEXT: Length: 2294// CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2)295// CHECK-NEXT: Symbol: _foo296// CHECK-NEXT: }297// CHECK-NEXT: }298// CHECK-NEXT: Section __debug_frame {299// CHECK-NEXT: Relocation {300// CHECK-NEXT: Offset: 0x8301// CHECK-NEXT: PCRel: 0302// CHECK-NEXT: Length: 3303// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)304// CHECK-NEXT: Symbol: _ext_foo305// CHECK-NEXT: }306// CHECK-NEXT: Relocation {307// CHECK-NEXT: Offset: 0x0308// CHECK-NEXT: PCRel: 0309// CHECK-NEXT: Length: 3310// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)311// CHECK-NEXT: Section: __text312// CHECK-NEXT: }313// CHECK-NEXT: }314// CHECK-NEXT: ]315