1 .text 2 .p2align 4,,15 3 .type implementation1, @function 4implementation1: 5 movl $1, %eax 6 ret 7 .size implementation1, .-implementation1 8 .p2align 4,,15 9 .type implementation2, @function 10implementation2: 11 movl $2, %eax 12 ret 13 .size implementation2, .-implementation2 14 .p2align 4,,15 15 .type resolver2, @function 16resolver2: 17 call __x86.get_pc_thunk.ax 18 addl $_GLOBAL_OFFSET_TABLE_, %eax 19 leal implementation2@GOTOFF(%eax), %eax 20 ret 21 .size resolver2, .-resolver2 22 .type func2, @gnu_indirect_function 23 .set func2,resolver2 24 .p2align 4,,15 25 .type resolver1, @function 26resolver1: 27 call __x86.get_pc_thunk.ax 28 addl $_GLOBAL_OFFSET_TABLE_, %eax 29 leal implementation1@GOTOFF(%eax), %eax 30 ret 31 .size resolver1, .-resolver1 32 .globl func1 33 .type func1, @gnu_indirect_function 34 .set func1,resolver1 35 .p2align 4,,15 36 .globl get_func2 37 .type get_func2, @function 38get_func2: 39 call __x86.get_pc_thunk.ax 40 addl $_GLOBAL_OFFSET_TABLE_, %eax 41 movl func2@GOT(%eax), %eax 42 ret 43 .size get_func2, .-get_func2 44 .p2align 4,,15 45 .globl call_func2 46 .type call_func2, @function 47call_func2: 48 pushl %ebx 49 call __x86.get_pc_thunk.bx 50 addl $_GLOBAL_OFFSET_TABLE_, %ebx 51 subl $8, %esp 52 call *get_func2@GOT(%ebx) 53 cmpl func2@GOT(%ebx), %eax 54 jne .L10 55 addl $8, %esp 56 movl %ebx, %eax 57 popl %ebx 58 jmp *func2@GOT(%eax) 59.L10: 60 call *abort@GOT(%ebx) 61 .size call_func2, .-call_func2 62 .section .text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat 63 .globl __x86.get_pc_thunk.ax 64 .hidden __x86.get_pc_thunk.ax 65 .type __x86.get_pc_thunk.ax, @function 66__x86.get_pc_thunk.ax: 67 movl (%esp), %eax 68 ret 69 .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat 70 .globl __x86.get_pc_thunk.bx 71 .hidden __x86.get_pc_thunk.bx 72 .type __x86.get_pc_thunk.bx, @function 73__x86.get_pc_thunk.bx: 74 movl (%esp), %ebx 75 ret 76 .section .note.GNU-stack,"",@progbits 77