Category: Programming

  • Linker relro

    gcc, the GNU linker, and the glibc dynamic linker cooperate to implement an idea called read-only relocations, or relro. This permits the linker to designate a part of an executable or (more commonly) a shared library as being read-only after dynamic relocations have been applied. This may be used for read-only global variables which are…

  • GCC in C++

    It is time to start using C++ in gcc. gcc was originally written in C. C++ has now advanced to the point where we can reasonably take advantage of the new features that it provides. The most obvious advantage would be in data structures. gcc implements data structures which are awkward to use for different…

  • Linker combreloc

    The GNU linker has a -z combreloc option, which is enabled by default (it can be turned off via -z nocombreloc). I just implemented this in gold as well. This option directs the linker to sort the dynamic relocations. The sorting is done in order to optimize the dynamic linker. The dynamic linker in glibc…

  • GCC Garbage

    gcc uses garbage collection internally during the course of a compilation. I wasn’t too involved with gcc at the time that garbage collection was introduced, but I certainly saw the problems that it was trying to solve. Before garbage collection, gcc allocated memory using obstacks. An obstack is a memory allocation pool in which if…

  • GCC vs. CERT

    CERT recently issued an unfortunate advisory about gcc. The advisory is about an optimization which gcc introduced in gcc 4.2: given a pointer p, then a comparison of the form p + C1 < p + C2 can be reduced to C1 < C2. This is always valid in standard C and C++, because those…