Search code examples
cglibc

What is the glibc GLRO macro?


I'm currently trying to understand how the glibc startup routines (__libc_start_main) process Elf Auxiliary vector types (auxv_t).

Browsing through the source code for glibc, I find references to some function named GLRO. In trying to track down the definition for this function, the closest I can find is

#define GLRO(x) _##x

When I search for "##x", all I find is other similar "#define" directives, which leaves me confused. What does this definition mean? Is "##x" some kind of compiler directive?


Solution

  • This is a preprocessor macro.

    You can see for yourself what it does by running the preprocessor. Just make a sample file, like this:

    // foo.c
    #include <some_glibc_header.h>
    
    GLRO(hello)
    

    Now run the preprocessor:

    gcc -E foo.c
    

    You'll see that the macro creates a new token by putting an underscore in front of the given token; in our example we obtain _hello. The ## preprocessor operator concatenates tokens.