Skip to content

Instantly share code, notes, and snippets.

@nickdesaulniers
Last active July 1, 2019 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nickdesaulniers/395129e75d9f7afe028db832145594d8 to your computer and use it in GitHub Desktop.
Save nickdesaulniers/395129e75d9f7afe028db832145594d8 to your computer and use it in GitHub Desktop.
Disassembly of arch/x86/kernel/cpu/mtrr/generic.o get_fixed_ranges()
; $ objdump -d -r -j __jump_table arch/x86/kernel/cpu/mtrr/generic.o
arch/x86/kernel/cpu/mtrr/generic.o: file format elf64-x86-64
Disassembly of section __jump_table:
0000000000000000 <__jump_table>:
...
0: R_X86_64_PC32 .text+0x3be
4: R_X86_64_PC32 .text+0x3c5
8: R_X86_64_PC64 __tracepoint_read_msr+0x8
10: R_X86_64_PC32 .text+0x3f9
14: R_X86_64_PC32 .text+0x400
18: R_X86_64_PC64 __tracepoint_read_msr+0x8
20: R_X86_64_PC32 .text+0x434
24: R_X86_64_PC32 .text+0x400
28: R_X86_64_PC64 __tracepoint_read_msr+0x8
30: R_X86_64_PC32 .text+0x494
34: R_X86_64_PC32 .text+0x49b
38: R_X86_64_PC64 __tracepoint_read_msr+0x8
40: R_X86_64_PC32 .text+0x534
44: R_X86_64_PC32 .text+0x53b
48: R_X86_64_PC64 __tracepoint_read_msr+0x8
50: R_X86_64_PC32 .text+0x577
54: R_X86_64_PC32 .text+0x57e
58: R_X86_64_PC64 __tracepoint_write_msr+0x8
60: R_X86_64_PC32 .text+0x622
64: R_X86_64_PC32 .text+0x629
68: R_X86_64_PC64 __tracepoint_write_msr+0x8
70: R_X86_64_PC32 .init.text+0x5d
74: R_X86_64_PC32 .init.text+0x64
78: R_X86_64_PC64 __tracepoint_read_msr+0x8
80: R_X86_64_PC32 .init.text+0xcd
84: R_X86_64_PC32 .init.text+0xd4
88: R_X86_64_PC64 __tracepoint_read_msr+0x8
90: R_X86_64_PC32 .init.text+0x116
94: R_X86_64_PC32 .init.text+0x11d
98: R_X86_64_PC64 __tracepoint_read_msr+0x8
a0: R_X86_64_PC32 .text+0x6c5
a4: R_X86_64_PC32 .text+0x6cc
a8: R_X86_64_PC64 __tracepoint_read_msr+0x8
b0: R_X86_64_PC32 .text+0x6fa
b4: R_X86_64_PC32 .text+0x701
b8: R_X86_64_PC64 __tracepoint_read_msr+0x8
c0: R_X86_64_PC32 .text+0x738
c4: R_X86_64_PC32 .text+0x73f
c8: R_X86_64_PC64 __tracepoint_write_msr+0x8
d0: R_X86_64_PC32 .text+0x9f4
d4: R_X86_64_PC32 .text+0x9fb
d8: R_X86_64_PC64 __tracepoint_write_msr+0x8
e0: R_X86_64_PC32 .text+0xa48
e4: R_X86_64_PC32 .text+0xa4f
e8: R_X86_64_PC64 __tracepoint_write_msr+0x8
f0: R_X86_64_PC32 .text+0xa9d
f4: R_X86_64_PC32 .text+0xaa4
f8: R_X86_64_PC64 __tracepoint_write_msr+0x8
100: R_X86_64_PC32 .text+0xdba
104: R_X86_64_PC32 .text+0xdc1
108: R_X86_64_PC64 __tracepoint_read_msr+0x8
110: R_X86_64_PC32 .text+0xe16
114: R_X86_64_PC32 .text+0xe1d
118: R_X86_64_PC64 __tracepoint_read_msr+0x8
120: R_X86_64_PC32 .text+0xecb
124: R_X86_64_PC32 .text+0xed2
128: R_X86_64_PC64 __tracepoint_read_msr+0x8
130: R_X86_64_PC32 .text+0xf2c
134: R_X86_64_PC32 .text+0xf33
138: R_X86_64_PC64 __tracepoint_read_msr+0x8
140: R_X86_64_PC32 .text+0xf86
144: R_X86_64_PC32 .text+0xf8d
148: R_X86_64_PC64 __tracepoint_write_msr+0x8
150: R_X86_64_PC32 .text+0x100a
154: R_X86_64_PC32 .text+0x1011
158: R_X86_64_PC64 __tracepoint_read_msr+0x8
160: R_X86_64_PC32 .text+0x106e
164: R_X86_64_PC32 .text+0x1075
168: R_X86_64_PC64 __tracepoint_write_msr+0x8
170: R_X86_64_PC32 .text+0x10b3
174: R_X86_64_PC32 .text+0x10ba
178: R_X86_64_PC64 __tracepoint_read_msr+0x8
180: R_X86_64_PC32 .text+0x1119
184: R_X86_64_PC32 .text+0x1120
188: R_X86_64_PC64 __tracepoint_write_msr+0x8
190: R_X86_64_PC32 .text+0x11c4
194: R_X86_64_PC32 .text+0x11cb
198: R_X86_64_PC64 __tracepoint_read_msr+0x8
1a0: R_X86_64_PC32 .text+0x1201
1a4: R_X86_64_PC32 .text+0x1208
1a8: R_X86_64_PC64 __tracepoint_write_msr+0x8
; $ gdb -batch -ex "file arch/x86/kernel/cpu/mtrr/generic.o" -ex "disassemble get_fixed_ranges"
Dump of assembler code for function get_fixed_ranges:
0x00000000000003a0 <+0>: push %r15
0x00000000000003a2 <+2>: push %r14
0x00000000000003a4 <+4>: push %rbx
0x00000000000003a5 <+5>: callq 0xf00 <k8_check_syscfg_dram_mod_en>
0x00000000000003aa <+10>: mov $0x250,%ecx
0x00000000000003af <+15>: rdmsr
0x00000000000003b1 <+17>: mov %rax,%r14
0x00000000000003b4 <+20>: mov %rdx,%rbx
0x00000000000003b7 <+23>: shl $0x20,%rbx
0x00000000000003bb <+27>: or %rax,%rbx
0x00000000000003be <+30>: nopl 0x0(%rax,%rax,1)
0x00000000000003c3 <+35>: jmp 0x3d4 <get_fixed_ranges+52>
0x00000000000003c5 <+37>: mov $0x250,%edi
0x00000000000003ca <+42>: mov %rbx,%rsi
0x00000000000003cd <+45>: xor %edx,%edx
0x00000000000003cf <+47>: callq 0x3d4 <get_fixed_ranges+52>
0x00000000000003d4 <+52>: mov %r14d,0x0(%rip) # 0x3db <get_fixed_ranges+59>
0x00000000000003db <+59>: shr $0x20,%rbx
0x00000000000003df <+63>: mov %ebx,0x0(%rip) # 0x3e5 <get_fixed_ranges+69>
0x00000000000003e5 <+69>: mov $0x258,%ecx
0x00000000000003ea <+74>: rdmsr
0x00000000000003ec <+76>: mov %rax,%r14
0x00000000000003ef <+79>: mov %rdx,%rbx
0x00000000000003f2 <+82>: shl $0x20,%rbx
0x00000000000003f6 <+86>: or %rax,%rbx
0x00000000000003f9 <+89>: nopl 0x0(%rax,%rax,1)
0x00000000000003fe <+94>: jmp 0x40f <get_fixed_ranges+111>
0x0000000000000400 <+96>: mov $0x258,%edi
0x0000000000000405 <+101>: mov %rbx,%rsi
0x0000000000000408 <+104>: xor %edx,%edx
0x000000000000040a <+106>: callq 0x40f <get_fixed_ranges+111>
0x000000000000040f <+111>: mov %r14d,0x0(%rip) # 0x416 <get_fixed_ranges+118>
0x0000000000000416 <+118>: shr $0x20,%rbx
0x000000000000041a <+122>: mov %ebx,0x0(%rip) # 0x420 <get_fixed_ranges+128>
0x0000000000000420 <+128>: mov $0x259,%ecx
0x0000000000000425 <+133>: rdmsr
0x0000000000000427 <+135>: mov %rax,%r14
0x000000000000042a <+138>: mov %rdx,%rbx
0x000000000000042d <+141>: shl $0x20,%rbx
0x0000000000000431 <+145>: or %rax,%rbx
0x0000000000000434 <+148>: nopl 0x0(%rax,%rax,1)
0x0000000000000439 <+153>: jmp 0x44a <get_fixed_ranges+170>
0x000000000000043b <+155>: mov $0x259,%edi
0x0000000000000440 <+160>: mov %rbx,%rsi
0x0000000000000443 <+163>: xor %edx,%edx
0x0000000000000445 <+165>: callq 0x44a <get_fixed_ranges+170>
0x000000000000044a <+170>: mov %r14d,0x0(%rip) # 0x451 <get_fixed_ranges+177>
0x0000000000000451 <+177>: shr $0x20,%rbx
0x0000000000000455 <+181>: mov %ebx,0x0(%rip) # 0x45b <get_fixed_ranges+187>
0x000000000000045b <+187>: xor %r15d,%r15d
0x000000000000045e <+190>: jmp 0x47e <get_fixed_ranges+222>
0x0000000000000460 <+192>: mov %r14d,0x0(,%r15,8)
0x0000000000000468 <+200>: shr $0x20,%rbx
0x000000000000046c <+204>: mov %ebx,0x0(,%r15,8)
0x0000000000000474 <+212>: add $0x1,%r15
0x0000000000000478 <+216>: cmp $0x8,%r15
0x000000000000047c <+220>: je 0x4a9 <get_fixed_ranges+265>
0x000000000000047e <+222>: lea 0x268(%r15),%rcx
0x0000000000000485 <+229>: rdmsr
0x0000000000000487 <+231>: mov %rax,%r14
0x000000000000048a <+234>: mov %rdx,%rbx
0x000000000000048d <+237>: shl $0x20,%rbx
0x0000000000000491 <+241>: or %rax,%rbx
0x0000000000000494 <+244>: nopl 0x0(%rax,%rax,1)
0x0000000000000499 <+249>: jmp 0x460 <get_fixed_ranges+192>
0x000000000000049b <+251>: mov %ecx,%edi
0x000000000000049d <+253>: mov %rbx,%rsi
0x00000000000004a0 <+256>: xor %edx,%edx
0x00000000000004a2 <+258>: callq 0x4a7 <get_fixed_ranges+263>
0x00000000000004a7 <+263>: jmp 0x460 <get_fixed_ranges+192>
0x00000000000004a9 <+265>: pop %rbx
0x00000000000004aa <+266>: pop %r14
0x00000000000004ac <+268>: pop %r15
0x00000000000004ae <+270>: retq
End of assembler dump.
$ make CC=clang
...
arch/x86/kernel/cpu/mtrr/generic.o: warning: objtool: get_fixed_ranges()+0x9b: unreachable instruction
$ python -c 'print(hex(0x3a0 + 0x9b))'
0x43b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment