This preview shows page 1. Sign up to view the full content.
Unformatted text preview: GOT In this fascinating piece of code, the call to L1 pushes the return address (which happens to be the address of the popl instruction) on the stack. The popl instruction then pops this address into %ebx. The net effect of these two instructions is to move the value of the PC into register %ebx. The addl instruction adds a constant offset to %ebx so that it points to the appropriate entry in the GOT, which contains the absolute address of the data item. At this point, the global variable can be referenced indirectly through the GOT entry contained in %ebx. In the example above, the two movl instructions load the contents of the global variable (indirectly through the GOT) into register %eax. 380 CHAPTER 7. LINKING PIC code has performance disadvantages. Each global variable reference now requires ﬁve instructions instead of one, with an additional memory reference to the GOT. Also, PIC code uses an additional register to hold the address of the GOT entry. On machines with large register...
View Full Document
- Spring '10
- The American