Here's what gdb shows:
Breakpoint 1, main () at testcase.c:4 4 void *p = main; (gdb) disas Dump of assembler code for function main: 0x00008390 <+0>: push {r7, lr} 0x00008392 <+2>: sub sp, #8 0x00008394 <+4>: add r7, sp, #0 => 0x00008396 <+6>: movw r3, #33681 ; 0x8391 0x0000839a <+10>: movt r3, #0 0x0000839e <+14>: str r3, [r7, #4] 0x000083a0 <+16>: ldr r3, [r7, #4] 0x000083a2 <+18>: and.w r3, r3, #1 0x000083a6 <+22>: uxtb r3, r3 0x000083a8 <+24>: cmp r3, #0 0x000083aa <+26>: beq.n 0x83b8 <main+40> 0x000083ac <+28>: movw r0, #33808 ; 0x8410 0x000083b0 <+32>: movt r0, #0 0x000083b4 <+36>: blx 0x8304 <puts> 0x000083b8 <+40>: add.w r7, r7, #8 0x000083bc <+44>: mov sp, r7 0x000083be <+46>: pop {r7, pc} End of assembler dump.
Here's what gdb shows:
Breakpoint 1, main () at testcase.c:4
4 void *p = main;
(gdb) disas
Dump of assembler code for function main:
0x00008390 <+0>: push {r7, lr}
0x00008392 <+2>: sub sp, #8
0x00008394 <+4>: add r7, sp, #0
=> 0x00008396 <+6>: movw r3, #33681 ; 0x8391
0x0000839a <+10>: movt r3, #0
0x0000839e <+14>: str r3, [r7, #4]
0x000083a0 <+16>: ldr r3, [r7, #4]
0x000083a2 <+18>: and.w r3, r3, #1
0x000083a6 <+22>: uxtb r3, r3
0x000083a8 <+24>: cmp r3, #0
0x000083aa <+26>: beq.n 0x83b8 <main+40>
0x000083ac <+28>: movw r0, #33808 ; 0x8410
0x000083b0 <+32>: movt r0, #0
0x000083b4 <+36>: blx 0x8304 <puts>
0x000083b8 <+40>: add.w r7, r7, #8
0x000083bc <+44>: mov sp, r7
0x000083be <+46>: pop {r7, pc}
End of assembler dump.