1// RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s 2 3// These examples are taken from <mach-o/x86_64/reloc.h>. 4 5 .data 6 .long 0 7 8 .text 9_foo: 10 ret 11 12_baz: 13 call _foo 14 call _foo+4 15 movq _foo@GOTPCREL(%rip), %rax 16 pushq _foo@GOTPCREL(%rip) 17 movl _foo(%rip), %eax 18 movl _foo+4(%rip), %eax 19 movb $0x12, _foo(%rip) 20 movl $0x12345678, _foo(%rip) 21 .quad _foo 22_bar: 23 .quad _foo+4 24 .quad _foo - _bar 25 .quad _foo - _bar + 4 26 .long _foo - _bar 27 leaq L1(%rip), %rax 28 leaq L0(%rip), %rax 29 addl $6,L0(%rip) 30 addw $500,L0(%rip) 31 addl $500,L0(%rip) 32 33_prev: 34 .space 12,0x90 35 .quad L1 36L0: 37 .quad L0 38L_pc: 39 .quad _foo - L_pc 40 .quad _foo - L1 41L1: 42 .quad L1 - _prev 43 44 .data 45.long _foobar@GOTPCREL+4 46.long _foo@GOTPCREL+4 47 48 .section __DWARF,__debug_frame,regular,debug 49 .quad L1 50 .quad _ext_foo 51 52// Make sure local label which overlaps with non-local one is assigned to the 53// right atom. 54 .text 55_f2: 56L2_0: 57 addl $0, %eax 58L2_1: 59_f3: 60 addl L2_1 - L2_0, %eax 61 62 .data 63L4: 64 .long 0 65 .text 66 movl L4(%rip), %eax 67 68 .section __TEXT,__literal8,8byte_literals 69 .quad 0 70L5: 71 .quad 0 72f6: 73 .quad 0 74L6: 75 .quad 0 76 77 .text 78 movl L5(%rip), %eax 79 movl f6(%rip), %eax 80 movl L6(%rip), %eax 81 82 .data 83 .quad L5 84 .quad f6 85 .quad L6 86 87 .text 88 cmpq $0, _foo@GOTPCREL(%rip) 89 90// CHECK: Relocations [ 91// CHECK-NEXT: Section __data { 92// CHECK-NEXT: Relocation { 93// CHECK-NEXT: Offset: 0x20 94// CHECK-NEXT: PCRel: 0 95// CHECK-NEXT: Length: 3 96// CHECK-NEXT: Extern: 0 97// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 98// CHECK-NEXT: Symbol: 0x4 99// CHECK-NEXT: Scattered: 0 100// CHECK-NEXT: } 101// CHECK-NEXT: Relocation { 102// CHECK-NEXT: Offset: 0x18 103// CHECK-NEXT: PCRel: 0 104// CHECK-NEXT: Length: 3 105// CHECK-NEXT: Extern: 1 106// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 107// CHECK-NEXT: Symbol: f6 108// CHECK-NEXT: Scattered: 0 109// CHECK-NEXT: } 110// CHECK-NEXT: Relocation { 111// CHECK-NEXT: Offset: 0x10 112// CHECK-NEXT: PCRel: 0 113// CHECK-NEXT: Length: 3 114// CHECK-NEXT: Extern: 0 115// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 116// CHECK-NEXT: Symbol: 0x4 117// CHECK-NEXT: Scattered: 0 118// CHECK-NEXT: } 119// CHECK-NEXT: Relocation { 120// CHECK-NEXT: Offset: 0x8 121// CHECK-NEXT: PCRel: 1 122// CHECK-NEXT: Length: 2 123// CHECK-NEXT: Extern: 1 124// CHECK-NEXT: Type: X86_64_RELOC_GOT (4) 125// CHECK-NEXT: Symbol: _foo 126// CHECK-NEXT: Scattered: 0 127// CHECK-NEXT: } 128// CHECK-NEXT: Relocation { 129// CHECK-NEXT: Offset: 0x4 130// CHECK-NEXT: PCRel: 1 131// CHECK-NEXT: Length: 2 132// CHECK-NEXT: Extern: 1 133// CHECK-NEXT: Type: X86_64_RELOC_GOT (4) 134// CHECK-NEXT: Symbol: _foobar 135// CHECK-NEXT: Scattered: 0 136// CHECK-NEXT: } 137// CHECK-NEXT: } 138// CHECK-NEXT: Section __text { 139// CHECK-NEXT: Relocation { 140// CHECK-NEXT: Offset: 0xDA 141// CHECK-NEXT: PCRel: 1 142// CHECK-NEXT: Length: 2 143// CHECK-NEXT: Extern: 1 144// CHECK-NEXT: Type: X86_64_RELOC_GOT (4) 145// CHECK-NEXT: Symbol: _foo 146// CHECK-NEXT: Scattered: 0 147// CHECK-NEXT: } 148// CHECK-NEXT: Relocation { 149// CHECK-NEXT: Offset: 0xD3 150// CHECK-NEXT: PCRel: 1 151// CHECK-NEXT: Length: 2 152// CHECK-NEXT: Extern: 0 153// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 154// CHECK-NEXT: Symbol: 0x4 155// CHECK-NEXT: Scattered: 0 156// CHECK-NEXT: } 157// CHECK-NEXT: Relocation { 158// CHECK-NEXT: Offset: 0xCD 159// CHECK-NEXT: PCRel: 1 160// CHECK-NEXT: Length: 2 161// CHECK-NEXT: Extern: 1 162// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 163// CHECK-NEXT: Symbol: f6 164// CHECK-NEXT: Scattered: 0 165// CHECK-NEXT: } 166// CHECK-NEXT: Relocation { 167// CHECK-NEXT: Offset: 0xC7 168// CHECK-NEXT: PCRel: 1 169// CHECK-NEXT: Length: 2 170// CHECK-NEXT: Extern: 0 171// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 172// CHECK-NEXT: Symbol: 0x4 173// CHECK-NEXT: Scattered: 0 174// CHECK-NEXT: } 175// CHECK-NEXT: Relocation { 176// CHECK-NEXT: Offset: 0xC1 177// CHECK-NEXT: PCRel: 1 178// CHECK-NEXT: Length: 2 179// CHECK-NEXT: Extern: 0 180// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 181// CHECK-NEXT: Symbol: 0x1 182// CHECK-NEXT: Scattered: 0 183// CHECK-NEXT: } 184// CHECK-NEXT: Relocation { 185// CHECK-NEXT: Offset: 0xA5 186// CHECK-NEXT: PCRel: 0 187// CHECK-NEXT: Length: 3 188// CHECK-NEXT: Extern: 1 189// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5) 190// CHECK-NEXT: Symbol: _prev 191// CHECK-NEXT: Scattered: 0 192// CHECK-NEXT: } 193// CHECK-NEXT: Relocation { 194// CHECK-NEXT: Offset: 0xA5 195// CHECK-NEXT: PCRel: 0 196// CHECK-NEXT: Length: 3 197// CHECK-NEXT: Extern: 1 198// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 199// CHECK-NEXT: Symbol: _foo 200// CHECK-NEXT: Scattered: 0 201// CHECK-NEXT: } 202// CHECK-NEXT: Relocation { 203// CHECK-NEXT: Offset: 0x9D 204// CHECK-NEXT: PCRel: 0 205// CHECK-NEXT: Length: 3 206// CHECK-NEXT: Extern: 1 207// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5) 208// CHECK-NEXT: Symbol: _prev 209// CHECK-NEXT: Scattered: 0 210// CHECK-NEXT: } 211// CHECK-NEXT: Relocation { 212// CHECK-NEXT: Offset: 0x9D 213// CHECK-NEXT: PCRel: 0 214// CHECK-NEXT: Length: 3 215// CHECK-NEXT: Extern: 1 216// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 217// CHECK-NEXT: Symbol: _foo 218// CHECK-NEXT: Scattered: 0 219// CHECK-NEXT: } 220// CHECK-NEXT: Relocation { 221// CHECK-NEXT: Offset: 0x95 222// CHECK-NEXT: PCRel: 0 223// CHECK-NEXT: Length: 3 224// CHECK-NEXT: Extern: 1 225// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 226// CHECK-NEXT: Symbol: _prev 227// CHECK-NEXT: Scattered: 0 228// CHECK-NEXT: } 229// CHECK-NEXT: Relocation { 230// CHECK-NEXT: Offset: 0x8D 231// CHECK-NEXT: PCRel: 0 232// CHECK-NEXT: Length: 3 233// CHECK-NEXT: Extern: 1 234// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 235// CHECK-NEXT: Symbol: _prev 236// CHECK-NEXT: Scattered: 0 237// CHECK-NEXT: } 238// CHECK-NEXT: Relocation { 239// CHECK-NEXT: Offset: 0x79 240// CHECK-NEXT: PCRel: 1 241// CHECK-NEXT: Length: 2 242// CHECK-NEXT: Extern: 1 243// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8) 244// CHECK-NEXT: Symbol: _prev 245// CHECK-NEXT: Scattered: 0 246// CHECK-NEXT: } 247// CHECK-NEXT: Relocation { 248// CHECK-NEXT: Offset: 0x71 249// CHECK-NEXT: PCRel: 1 250// CHECK-NEXT: Length: 2 251// CHECK-NEXT: Extern: 1 252// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_2 (7) 253// CHECK-NEXT: Symbol: _prev 254// CHECK-NEXT: Scattered: 0 255// CHECK-NEXT: } 256// CHECK-NEXT: Relocation { 257// CHECK-NEXT: Offset: 0x69 258// CHECK-NEXT: PCRel: 1 259// CHECK-NEXT: Length: 2 260// CHECK-NEXT: Extern: 1 261// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6) 262// CHECK-NEXT: Symbol: _prev 263// CHECK-NEXT: Scattered: 0 264// CHECK-NEXT: } 265// CHECK-NEXT: Relocation { 266// CHECK-NEXT: Offset: 0x63 267// CHECK-NEXT: PCRel: 1 268// CHECK-NEXT: Length: 2 269// CHECK-NEXT: Extern: 1 270// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 271// CHECK-NEXT: Symbol: _prev 272// CHECK-NEXT: Scattered: 0 273// CHECK-NEXT: } 274// CHECK-NEXT: Relocation { 275// CHECK-NEXT: Offset: 0x5C 276// CHECK-NEXT: PCRel: 1 277// CHECK-NEXT: Length: 2 278// CHECK-NEXT: Extern: 1 279// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 280// CHECK-NEXT: Symbol: _prev 281// CHECK-NEXT: Scattered: 0 282// CHECK-NEXT: } 283// CHECK-NEXT: Relocation { 284// CHECK-NEXT: Offset: 0x55 285// CHECK-NEXT: PCRel: 0 286// CHECK-NEXT: Length: 2 287// CHECK-NEXT: Extern: 1 288// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5) 289// CHECK-NEXT: Symbol: _bar 290// CHECK-NEXT: Scattered: 0 291// CHECK-NEXT: } 292// CHECK-NEXT: Relocation { 293// CHECK-NEXT: Offset: 0x55 294// CHECK-NEXT: PCRel: 0 295// CHECK-NEXT: Length: 2 296// CHECK-NEXT: Extern: 1 297// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 298// CHECK-NEXT: Symbol: _foo 299// CHECK-NEXT: Scattered: 0 300// CHECK-NEXT: } 301// CHECK-NEXT: Relocation { 302// CHECK-NEXT: Offset: 0x4D 303// CHECK-NEXT: PCRel: 0 304// CHECK-NEXT: Length: 3 305// CHECK-NEXT: Extern: 1 306// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5) 307// CHECK-NEXT: Symbol: _bar 308// CHECK-NEXT: Scattered: 0 309// CHECK-NEXT: } 310// CHECK-NEXT: Relocation { 311// CHECK-NEXT: Offset: 0x4D 312// CHECK-NEXT: PCRel: 0 313// CHECK-NEXT: Length: 3 314// CHECK-NEXT: Extern: 1 315// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 316// CHECK-NEXT: Symbol: _foo 317// CHECK-NEXT: Scattered: 0 318// CHECK-NEXT: } 319// CHECK-NEXT: Relocation { 320// CHECK-NEXT: Offset: 0x45 321// CHECK-NEXT: PCRel: 0 322// CHECK-NEXT: Length: 3 323// CHECK-NEXT: Extern: 1 324// CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5) 325// CHECK-NEXT: Symbol: _bar 326// CHECK-NEXT: Scattered: 0 327// CHECK-NEXT: } 328// CHECK-NEXT: Relocation { 329// CHECK-NEXT: Offset: 0x45 330// CHECK-NEXT: PCRel: 0 331// CHECK-NEXT: Length: 3 332// CHECK-NEXT: Extern: 1 333// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 334// CHECK-NEXT: Symbol: _foo 335// CHECK-NEXT: Scattered: 0 336// CHECK-NEXT: } 337// CHECK-NEXT: Relocation { 338// CHECK-NEXT: Offset: 0x3D 339// CHECK-NEXT: PCRel: 0 340// CHECK-NEXT: Length: 3 341// CHECK-NEXT: Extern: 1 342// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 343// CHECK-NEXT: Symbol: _foo 344// CHECK-NEXT: Scattered: 0 345// CHECK-NEXT: } 346// CHECK-NEXT: Relocation { 347// CHECK-NEXT: Offset: 0x35 348// CHECK-NEXT: PCRel: 0 349// CHECK-NEXT: Length: 3 350// CHECK-NEXT: Extern: 1 351// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 352// CHECK-NEXT: Symbol: _foo 353// CHECK-NEXT: Scattered: 0 354// CHECK-NEXT: } 355// CHECK-NEXT: Relocation { 356// CHECK-NEXT: Offset: 0x2D 357// CHECK-NEXT: PCRel: 1 358// CHECK-NEXT: Length: 2 359// CHECK-NEXT: Extern: 1 360// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8) 361// CHECK-NEXT: Symbol: _foo 362// CHECK-NEXT: Scattered: 0 363// CHECK-NEXT: } 364// CHECK-NEXT: Relocation { 365// CHECK-NEXT: Offset: 0x26 366// CHECK-NEXT: PCRel: 1 367// CHECK-NEXT: Length: 2 368// CHECK-NEXT: Extern: 1 369// CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6) 370// CHECK-NEXT: Symbol: _foo 371// CHECK-NEXT: Scattered: 0 372// CHECK-NEXT: } 373// CHECK-NEXT: Relocation { 374// CHECK-NEXT: Offset: 0x20 375// CHECK-NEXT: PCRel: 1 376// CHECK-NEXT: Length: 2 377// CHECK-NEXT: Extern: 1 378// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 379// CHECK-NEXT: Symbol: _foo 380// CHECK-NEXT: Scattered: 0 381// CHECK-NEXT: } 382// CHECK-NEXT: Relocation { 383// CHECK-NEXT: Offset: 0x1A 384// CHECK-NEXT: PCRel: 1 385// CHECK-NEXT: Length: 2 386// CHECK-NEXT: Extern: 1 387// CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1) 388// CHECK-NEXT: Symbol: _foo 389// CHECK-NEXT: Scattered: 0 390// CHECK-NEXT: } 391// CHECK-NEXT: Relocation { 392// CHECK-NEXT: Offset: 0x14 393// CHECK-NEXT: PCRel: 1 394// CHECK-NEXT: Length: 2 395// CHECK-NEXT: Extern: 1 396// CHECK-NEXT: Type: X86_64_RELOC_GOT (4) 397// CHECK-NEXT: Symbol: _foo 398// CHECK-NEXT: Scattered: 0 399// CHECK-NEXT: } 400// CHECK-NEXT: Relocation { 401// CHECK-NEXT: Offset: 0xE 402// CHECK-NEXT: PCRel: 1 403// CHECK-NEXT: Length: 2 404// CHECK-NEXT: Extern: 1 405// CHECK-NEXT: Type: X86_64_RELOC_GOT_LOAD (3) 406// CHECK-NEXT: Symbol: _foo 407// CHECK-NEXT: Scattered: 0 408// CHECK-NEXT: } 409// CHECK-NEXT: Relocation { 410// CHECK-NEXT: Offset: 0x7 411// CHECK-NEXT: PCRel: 1 412// CHECK-NEXT: Length: 2 413// CHECK-NEXT: Extern: 1 414// CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2) 415// CHECK-NEXT: Symbol: _foo 416// CHECK-NEXT: Scattered: 0 417// CHECK-NEXT: } 418// CHECK-NEXT: Relocation { 419// CHECK-NEXT: Offset: 0x2 420// CHECK-NEXT: PCRel: 1 421// CHECK-NEXT: Length: 2 422// CHECK-NEXT: Extern: 1 423// CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2) 424// CHECK-NEXT: Symbol: _foo 425// CHECK-NEXT: Scattered: 0 426// CHECK-NEXT: } 427// CHECK-NEXT: } 428// CHECK-NEXT: Section __debug_frame { 429// CHECK-NEXT: Relocation { 430// CHECK-NEXT: Offset: 0x8 431// CHECK-NEXT: PCRel: 0 432// CHECK-NEXT: Length: 3 433// CHECK-NEXT: Extern: 1 434// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 435// CHECK-NEXT: Symbol: _ext_foo 436// CHECK-NEXT: Scattered: 0 437// CHECK-NEXT: } 438// CHECK-NEXT: Relocation { 439// CHECK-NEXT: Offset: 0x0 440// CHECK-NEXT: PCRel: 0 441// CHECK-NEXT: Length: 3 442// CHECK-NEXT: Extern: 0 443// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0) 444// CHECK-NEXT: Symbol: 0x2 445// CHECK-NEXT: Scattered: 0 446// CHECK-NEXT: } 447// CHECK-NEXT: } 448// CHECK-NEXT: ] 449