Category: Programming

  • Linkers part 9

    Symbol Versions A shared library provides an API. Since executables are built with a specific set of header files and linked against a specific instance of the shared library, it also provides an ABI. It is desirable to be able to update the shared library independently of the executable. This permits fixing bugs in the…

  • Linkers part 8

    ELF Segments Earlier I said that executable file formats were normally the same as object file formats. That is true for ELF, but with a twist. In ELF, object files are composed of sections: all the data in the file is accessed via the section table. Executables and shared libraries normally contain a section table,…

  • Linkers part 7

    As we’ve seen, what linkers do is basically quite simple, but the details can get complicated. The complexity is because smart programmers can see small optimizations to speed up their programs a little bit, and somtimes the only place those optimizations can be implemented is the linker. Each such optimizations makes the linker a little…

  • Linkers part 6

    So many things to talk about. Let’s go back and cover relocations in some more detail, with some examples. Relocations As I said back in part 2, a relocation is a computation to perform on the contents. And as I said yesterday, a relocation can also direct the linker to take other actions, like creating…

  • Linkers part 5

    Shared Libraries Redux Yesterday I talked about how shared libraries work. I realized that I should say something about how linkers implement shared libraries. This discussion will again be ELF specific. When the program linker puts position dependent code into a shared library, it has to copy more of the relocations from the object file…