1
2call    _foo                
3# r_type= X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
4# E8 00 00 00 00 
5
6call    _foo+4                
7# r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
8# E8 04 00 00 00 
9
10# TODO: movq _foo@GOTPCREL(%rip), %rax
11# r_type=X86_64_RELOC_GOT_LOAD, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
12# 48 8B 05 00 00 00 00
13
14# TODO: pushq _foo@GOTPCREL(%rip)
15# r_type=X86_64_RELOC_GOT, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
16# FF 35 00 00 00 00
17
18movl _foo(%rip), %eax
19# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
20# 8B 05 00 00 00 00 
21
22movl _foo+4(%rip), %eax
23# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
24# 8B 05 04 00 00 00 
25
26movb  $0x12, _foo(%rip)
27# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
28# C6 05 FF FF FF FF 12 
29
30movl  $0x12345678, _foo(%rip)
31# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo
32# C7 05 FC FF FF FF 78 56 34 12
33
34.quad _foo
35# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=1,r_pcrel=0, r_symbolnum=_foo
36# 00 00 00 00 00 00 00 00
37
38.quad _foo+4
39# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo
40# 04 00 00 00 00 00 00 00
41
42# TODO: .quad _foo - _bar
43# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1, r_pcrel=0,r_symbolnum=_bar
44# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1, r_pcrel=0,r_symbolnum=_foo
45# 00 00 00 00 00 00 00 00
46
47# TODO: .quad _foo - _bar + 4
48# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3, r_extern=1,r_pcrel=0,r_symbolnum=_bar
49# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=1,r_pcrel=0,r_symbolnum=_foo
50# 04 00 00 00 00 00 00 00
51
52# TODO: .long _foo - _bar
53# r_type=X86_64_RELOC_SUBTRACTOR,r_length=2,r_extern=1,r_pcrel=0,r_symbolnum=_bar
54# r_type=X86_64_RELOC_UNSIGNED,r_length=2,r_extern=1,r_pcrel=0,r_symbolnum=_foo
55# 00 00 00 00 
56
57lea L1(%rip), %rax
58# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_prev
59# 48 8d 05 12 00 00 00 
60# Assumes that _prev is the first nonlocal label 0x12 bytes before L1.
61 
62lea L0(%rip), %rax
63# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=0, r_pcrel=1, r_symbolnum=3
64# 48 8d 05 56 00 00 00 
65# Assumes that  L0 is in third section, and has an address of 0x00000056 
66# in .o file, and no previous nonlocal label.
67 
68.quad L1
69# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0, r_symbolnum= _prev
70# 12 00 00 00 00 00 00 00
71# Assumes that _prev is the first nonlocal label 0x12 bytes before L1.
72 
73.quad L0
74# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=0, r_pcrel=0, r_symbolnum= 3
75# 56 00 00 00 00 00 00 00
76# Assumes that L0 is in third section, and has address of 0x00000056 
77# in .o file, and no previous nonlocal label.
78 
79# TODO: .quad _foo - .
80# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_prev
81# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo
82# EE FF FF FF FF FF FF FF
83# Assumes that _prev is the first nonlocal label 0x12 bytes 
84# before this .quad 
85 
86# TODO: .quad _foo - L1
87# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_prev
88# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo
89# EE FF FF FF FF FF FF FF
90# Assumes that  _prev is the first nonlocal label 0x12 bytes before L1. 
91 
92.quad L1 - _prev
93# No relocations. This is an assembly time constant.
94# 12 00 00 00 00 00 00 00
95# Assumes that _prev is the first nonlocal label 0x12 bytes before L
96
97.data
98.org 0x56
99L0:
100_prev:
101.quad 0, 0
102.byte 0, 0
103L1:
104