Skip to content
Advertisement

How are the entries for Global Symbols that are not functions initialized in the Global Offset Table?

So I am trying to learn about dynamic linking. On SysV ABI on amd64, functions from other shared libraries can be loaded lazily via the Procedure Linkage Table by initializing the GOT entry for the function to point at the next instruction in its plt entry. This will eventually pass control on to the dynamic linker that will load the library, update the GOT entry and jump to function. Now for other global symbols that are not functions (do not have PLT entries), how or when will they be initialized? Can it be done lazily?

Advertisement

Answer

This will eventually pass control on to the dynamic linker that will load the library, update the GOT entry and jump to function

This is only partially correct: the library will normally already be loaded, and the loader only resolves the symbol and updates the GOT entry to point to the symbol definition.

Now for other global symbols that are not functions (do not have PLT entries), how or when will they be initialized?

When the library (or executable) referencing the symbol is loaded, the loader resolves all the data symbols in it, before making it available.

Can it be done lazily?

No.

See also this answer.

Advertisement