darwin-x86_64-reloc.s revision a5f1d57f65ae601ec181c0f4e36cf0df5e8d79d8
1// RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | 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// CHECK: ('cputype', 16777223) 88// CHECK: ('cpusubtype', 3) 89// CHECK: ('filetype', 1) 90// CHECK: ('num_load_commands', 1) 91// CHECK: ('load_commands_size', 496) 92// CHECK: ('flag', 0) 93// CHECK: ('reserved', 0) 94// CHECK: ('load_commands', [ 95// CHECK: # Load Command 0 96// CHECK: (('command', 25) 97// CHECK: ('size', 392) 98// CHECK: ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 99// CHECK: ('vm_addr', 0) 100// CHECK: ('vm_size', 303) 101// CHECK: ('file_offset', 528) 102// CHECK: ('file_size', 303) 103// CHECK: ('maxprot', 7) 104// CHECK: ('initprot', 7) 105// CHECK: ('num_sections', 4) 106// CHECK: ('flags', 0) 107// CHECK: ('sections', [ 108// CHECK: # Section 0 109// CHECK: (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 110// CHECK: ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 111// CHECK: ('address', 0) 112// CHECK: ('size', 40) 113// CHECK: ('offset', 528) 114// CHECK: ('alignment', 0) 115// CHECK: ('reloc_offset', 832) 116// CHECK: ('num_reloc', 5) 117// CHECK: ('flags', 0x0) 118// CHECK: ('reserved1', 0) 119// CHECK: ('reserved2', 0) 120// CHECK: ('reserved3', 0) 121// CHECK: ), 122// CHECK: ('_relocations', [ 123// CHECK: # Relocation 0 124// CHECK: (('word-0', 0x20), 125// CHECK: ('word-1', 0x6000004)), 126// CHECK: # Relocation 1 127// CHECK: (('word-0', 0x18), 128// CHECK: ('word-1', 0xe000006)), 129// CHECK: # Relocation 2 130// CHECK: (('word-0', 0x10), 131// CHECK: ('word-1', 0x6000004)), 132// CHECK: # Relocation 3 133// CHECK: (('word-0', 0x8), 134// CHECK: ('word-1', 0x4d000000)), 135// CHECK: # Relocation 4 136// CHECK: (('word-0', 0x4), 137// CHECK: ('word-1', 0x4d000008)), 138// CHECK: ]) 139// CHECK: ('_section_data', "\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x17\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x01\x00\x00\x00\x00\x00\x00") 140// CHECK: # Section 1 141// CHECK: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 142// CHECK: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 143// CHECK: ('address', 40) 144// CHECK: ('size', 215) 145// CHECK: ('offset', 568) 146// CHECK: ('alignment', 0) 147// CHECK: ('reloc_offset', 872) 148// CHECK: ('num_reloc', 31) 149// CHECK: ('flags', 0x80000400) 150// CHECK: ('reserved1', 0) 151// CHECK: ('reserved2', 0) 152// CHECK: ('reserved3', 0) 153// CHECK: ), 154// CHECK: ('_relocations', [ 155// CHECK: # Relocation 0 156// CHECK: (('word-0', 0xd3), 157// CHECK: ('word-1', 0x15000004)), 158// CHECK: # Relocation 1 159// CHECK: (('word-0', 0xcd), 160// CHECK: ('word-1', 0x1d000006)), 161// CHECK: # Relocation 2 162// CHECK: (('word-0', 0xc7), 163// CHECK: ('word-1', 0x15000004)), 164// CHECK: # Relocation 3 165// CHECK: (('word-0', 0xc1), 166// CHECK: ('word-1', 0x15000001)), 167// CHECK: # Relocation 4 168// CHECK: (('word-0', 0xa5), 169// CHECK: ('word-1', 0x5e000003)), 170// CHECK: # Relocation 5 171// CHECK: (('word-0', 0xa5), 172// CHECK: ('word-1', 0xe000000)), 173// CHECK: # Relocation 6 174// CHECK: (('word-0', 0x9d), 175// CHECK: ('word-1', 0x5e000003)), 176// CHECK: # Relocation 7 177// CHECK: (('word-0', 0x9d), 178// CHECK: ('word-1', 0xe000000)), 179// CHECK: # Relocation 8 180// CHECK: (('word-0', 0x95), 181// CHECK: ('word-1', 0xe000003)), 182// CHECK: # Relocation 9 183// CHECK: (('word-0', 0x8d), 184// CHECK: ('word-1', 0xe000003)), 185// CHECK: # Relocation 10 186// CHECK: (('word-0', 0x79), 187// CHECK: ('word-1', 0x8d000003)), 188// CHECK: # Relocation 11 189// CHECK: (('word-0', 0x71), 190// CHECK: ('word-1', 0x7d000003)), 191// CHECK: # Relocation 12 192// CHECK: (('word-0', 0x69), 193// CHECK: ('word-1', 0x6d000003)), 194// CHECK: # Relocation 13 195// CHECK: (('word-0', 0x63), 196// CHECK: ('word-1', 0x1d000003)), 197// CHECK: # Relocation 14 198// CHECK: (('word-0', 0x5c), 199// CHECK: ('word-1', 0x1d000003)), 200// CHECK: # Relocation 15 201// CHECK: (('word-0', 0x55), 202// CHECK: ('word-1', 0x5c000002)), 203// CHECK: # Relocation 16 204// CHECK: (('word-0', 0x55), 205// CHECK: ('word-1', 0xc000000)), 206// CHECK: # Relocation 17 207// CHECK: (('word-0', 0x4d), 208// CHECK: ('word-1', 0x5e000002)), 209// CHECK: # Relocation 18 210// CHECK: (('word-0', 0x4d), 211// CHECK: ('word-1', 0xe000000)), 212// CHECK: # Relocation 19 213// CHECK: (('word-0', 0x45), 214// CHECK: ('word-1', 0x5e000002)), 215// CHECK: # Relocation 20 216// CHECK: (('word-0', 0x45), 217// CHECK: ('word-1', 0xe000000)), 218// CHECK: # Relocation 21 219// CHECK: (('word-0', 0x3d), 220// CHECK: ('word-1', 0xe000000)), 221// CHECK: # Relocation 22 222// CHECK: (('word-0', 0x35), 223// CHECK: ('word-1', 0xe000000)), 224// CHECK: # Relocation 23 225// CHECK: (('word-0', 0x2d), 226// CHECK: ('word-1', 0x8d000000)), 227// CHECK: # Relocation 24 228// CHECK: (('word-0', 0x26), 229// CHECK: ('word-1', 0x6d000000)), 230// CHECK: # Relocation 25 231// CHECK: (('word-0', 0x20), 232// CHECK: ('word-1', 0x1d000000)), 233// CHECK: # Relocation 26 234// CHECK: (('word-0', 0x1a), 235// CHECK: ('word-1', 0x1d000000)), 236// CHECK: # Relocation 27 237// CHECK: (('word-0', 0x14), 238// CHECK: ('word-1', 0x4d000000)), 239// CHECK: # Relocation 28 240// CHECK: (('word-0', 0xe), 241// CHECK: ('word-1', 0x3d000000)), 242// CHECK: # Relocation 29 243// CHECK: (('word-0', 0x7), 244// CHECK: ('word-1', 0x2d000000)), 245// CHECK: # Relocation 30 246// CHECK: (('word-0', 0x2), 247// CHECK: ('word-1', 0x2d000000)), 248// CHECK: ]) 249// CHECK: ('_section_data', '\xc3\xe8\x00\x00\x00\x00\xe8\x04\x00\x00\x00H\x8b\x05\x00\x00\x00\x00\xff5\x00\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x8b\x05\x04\x00\x00\x00\xc6\x05\xff\xff\xff\xff\x12\xc7\x05\xfc\xff\xff\xffxV4\x12\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00H\x8d\x05,\x00\x00\x00H\x8d\x05\x14\x00\x00\x00\x83\x05\x13\x00\x00\x00\x06f\x81\x05\x12\x00\x00\x00\xf4\x01\x81\x05\x10\x00\x00\x00\xf4\x01\x00\x00\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90,\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\xe4\xff\xff\xff\xff\xff\xff\xff\xd4\xff\xff\xff\xff\xff\xff\xff,\x00\x00\x00\x00\x00\x00\x00\x83\xc0\x00\x03\x04%\x03\x00\x00\x00\x8b\x05\x1f\xff\xff\xff\x8b\x05$\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x8b\x05(\x00\x00\x00') 250// CHECK: # Section 2 251// CHECK: (('section_name', '__debug_frame\x00\x00\x00') 252// CHECK: ('segment_name', '__DWARF\x00\x00\x00\x00\x00\x00\x00\x00\x00') 253// CHECK: ('address', 255) 254// CHECK: ('size', 16) 255// CHECK: ('offset', 783) 256// CHECK: ('alignment', 0) 257// CHECK: ('reloc_offset', 1120) 258// CHECK: ('num_reloc', 2) 259// CHECK: ('flags', 0x2000000) 260// CHECK: ('reserved1', 0) 261// CHECK: ('reserved2', 0) 262// CHECK: ('reserved3', 0) 263// CHECK: ), 264// CHECK: ('_relocations', [ 265// CHECK: # Relocation 0 266// CHECK: (('word-0', 0x8), 267// CHECK: ('word-1', 0xe000007)), 268// CHECK: # Relocation 1 269// CHECK: (('word-0', 0x0), 270// CHECK: ('word-1', 0x6000002)), 271// CHECK: ]) 272// CHECK: ('_section_data', '\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 273// CHECK: # Section 3 274// CHECK: (('section_name', '__literal8\x00\x00\x00\x00\x00\x00') 275// CHECK: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 276// CHECK: ('address', 271) 277// CHECK: ('size', 32) 278// CHECK: ('offset', 799) 279// CHECK: ('alignment', 0) 280// CHECK: ('reloc_offset', 0) 281// CHECK: ('num_reloc', 0) 282// CHECK: ('flags', 0x4) 283// CHECK: ('reserved1', 0) 284// CHECK: ('reserved2', 0) 285// CHECK: ('reserved3', 0) 286// CHECK: ), 287// CHECK: ('_relocations', [ 288// CHECK: ]) 289// CHECK: ('_section_data', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 290// CHECK: ]) 291// CHECK: ), 292// CHECK: # Load Command 1 293// CHECK: (('command', 2) 294// CHECK: ('size', 24) 295// CHECK: ('symoff', 1136) 296// CHECK: ('nsyms', 9) 297// CHECK: ('stroff', 1280) 298// CHECK: ('strsize', 52) 299// CHECK: ('_string_data', '\x00_foobar\x00_ext_foo\x00_foo\x00_baz\x00_bar\x00_prev\x00_f2\x00_f3\x00f6\x00\x00\x00') 300// CHECK: ('_symbols', [ 301// CHECK: # Symbol 0 302// CHECK: (('n_strx', 18) 303// CHECK: ('n_type', 0xe) 304// CHECK: ('n_sect', 2) 305// CHECK: ('n_desc', 0) 306// CHECK: ('n_value', 40) 307// CHECK: ('_string', '_foo') 308// CHECK: ), 309// CHECK: # Symbol 1 310// CHECK: (('n_strx', 23) 311// CHECK: ('n_type', 0xe) 312// CHECK: ('n_sect', 2) 313// CHECK: ('n_desc', 0) 314// CHECK: ('n_value', 41) 315// CHECK: ('_string', '_baz') 316// CHECK: ), 317// CHECK: # Symbol 2 318// CHECK: (('n_strx', 28) 319// CHECK: ('n_type', 0xe) 320// CHECK: ('n_sect', 2) 321// CHECK: ('n_desc', 0) 322// CHECK: ('n_value', 101) 323// CHECK: ('_string', '_bar') 324// CHECK: ), 325// CHECK: # Symbol 3 326// CHECK: (('n_strx', 33) 327// CHECK: ('n_type', 0xe) 328// CHECK: ('n_sect', 2) 329// CHECK: ('n_desc', 0) 330// CHECK: ('n_value', 169) 331// CHECK: ('_string', '_prev') 332// CHECK: ), 333// CHECK: # Symbol 4 334// CHECK: (('n_strx', 39) 335// CHECK: ('n_type', 0xe) 336// CHECK: ('n_sect', 2) 337// CHECK: ('n_desc', 0) 338// CHECK: ('n_value', 221) 339// CHECK: ('_string', '_f2') 340// CHECK: ), 341// CHECK: # Symbol 5 342// CHECK: (('n_strx', 43) 343// CHECK: ('n_type', 0xe) 344// CHECK: ('n_sect', 2) 345// CHECK: ('n_desc', 0) 346// CHECK: ('n_value', 224) 347// CHECK: ('_string', '_f3') 348// CHECK: ), 349// CHECK: # Symbol 6 350// CHECK: (('n_strx', 47) 351// CHECK: ('n_type', 0xe) 352// CHECK: ('n_sect', 4) 353// CHECK: ('n_desc', 0) 354// CHECK: ('n_value', 287) 355// CHECK: ('_string', 'f6') 356// CHECK: ), 357// CHECK: # Symbol 7 358// CHECK: (('n_strx', 9) 359// CHECK: ('n_type', 0x1) 360// CHECK: ('n_sect', 0) 361// CHECK: ('n_desc', 0) 362// CHECK: ('n_value', 0) 363// CHECK: ('_string', '_ext_foo') 364// CHECK: ), 365// CHECK: # Symbol 8 366// CHECK: (('n_strx', 1) 367// CHECK: ('n_type', 0x1) 368// CHECK: ('n_sect', 0) 369// CHECK: ('n_desc', 0) 370// CHECK: ('n_value', 0) 371// CHECK: ('_string', '_foobar') 372// CHECK: ), 373// CHECK: ]) 374// CHECK: ), 375// CHECK: # Load Command 2 376// CHECK: (('command', 11) 377// CHECK: ('size', 80) 378// CHECK: ('ilocalsym', 0) 379// CHECK: ('nlocalsym', 7) 380// CHECK: ('iextdefsym', 7) 381// CHECK: ('nextdefsym', 0) 382// CHECK: ('iundefsym', 7) 383// CHECK: ('nundefsym', 2) 384// CHECK: ('tocoff', 0) 385// CHECK: ('ntoc', 0) 386// CHECK: ('modtaboff', 0) 387// CHECK: ('nmodtab', 0) 388// CHECK: ('extrefsymoff', 0) 389// CHECK: ('nextrefsyms', 0) 390// CHECK: ('indirectsymoff', 0) 391// CHECK: ('nindirectsyms', 0) 392// CHECK: ('extreloff', 0) 393// CHECK: ('nextrel', 0) 394// CHECK: ('locreloff', 0) 395// CHECK: ('nlocrel', 0) 396// CHECK: ('_indirect_symbols', [ 397// CHECK: ]) 398// CHECK: ), 399// CHECK: ]) 400