extern int zob; void foo(void) { register int i = 42; zob += i; } % gcc -c pic.c -S -o - .file "pic.c" .text .globl foo .type foo, @function foo: pushl %ebp movl %esp, %ebp movl $42, %eax addl %eax, zob popl %ebp ret .size foo, .-foo .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.4 (Debian 1:3.3.4-9)" % gcc -fPIC -c pic.c -S -o - .file "pic.c" .text .globl foo .type foo, @function foo: pushl %ebp movl %esp, %ebp pushl %ebx call __i686.get_pc_thunk.bx addl $_GLOBAL_OFFSET_TABLE_, %ebx movl $42, %edx movl zob@GOT(%ebx), %ecx movl zob@GOT(%ebx), %eax movl (%eax), %eax addl %edx, %eax movl %eax, (%ecx) popl %ebx popl %ebp ret .size foo, .-foo .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits .globl __i686.get_pc_thunk.bx .hidden __i686.get_pc_thunk.bx .type __i686.get_pc_thunk.bx, @function __i686.get_pc_thunk.bx: movl (%esp), %ebx ret .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.4 (Debian 1:3.3.4-9)" % gcc -fPIC -finline-functions -O3 -c pic.c -S -o - .file "pic.c" .text .p2align 4,,15 .globl foo .type foo, @function foo: call __i686.get_pc_thunk.ax addl $_GLOBAL_OFFSET_TABLE_, %eax pushl %ebp movl zob@GOT(%eax), %edx movl %esp, %ebp addl $42, (%edx) popl %ebp ret .size foo, .-foo .section .gnu.linkonce.t.__i686.get_pc_thunk.ax,"ax",@progbits .globl __i686.get_pc_thunk.ax .hidden __i686.get_pc_thunk.ax .type __i686.get_pc_thunk.ax, @function __i686.get_pc_thunk.ax: movl (%esp), %eax ret .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.4 (Debian 1:3.3.4-9)"