Skip to content
  • Guillem Jover's avatar
    Force setproctitle() into .init_array section · 6faea4d2
    Guillem Jover authored
    The GNU .init_array support is an extension over the standard System V
    ABI .init_array support, which passes the main() arguments to the init
    function.
    
    This support comes in three parts. First the dynamic linker (from glibc)
    needs to support it. Then function pointers need to be placed in the
    section, for example by using __attribute__((constructor)), that the
    compiler (gcc or clang for example) might place in section .ctors and
    the linker (from binutils) will move to .init_array on the output
    object, or by placing them directly into .init_array by the compiler
    when compiling. If this does not happen and the function pointers end
    up in .ctors, then they will not get passed the main() arguments, which
    we do really need in this case.
    
    But this relies on recent binutils or gcc having native .init_array
    support, and not having it disabled through --disable-initfini-array.
    
    To guarantee we get the correct behaviour, let's just place the function
    pointer in the .init_array section directly, so we only require a recent
    enough glibc.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=65029
    6faea4d2