• R
    use explicit visibility to optimize a few hot-path function calls · 607b05ac
    Rich Felker 提交于
    on x86 and some other archs, functions which make function calls which
    might go through a PLT incur a significant overhead cost loading the
    GOT register prior to making the call. this load is utterly useless in
    musl, since all calls are bound at library-creation time using
    -Bsymbolic-functions, but the compiler has no way of knowing this, and
    attempts to set the default visibility to protected have failed due to
    bugs in GCC and binutils.
    
    this commit simply manually assigns hidden/protected visibility, as
    appropriate, to a few internal-use-only functions which have many
    callers, or which have callers that are hot paths like getc/putc. it
    shaves about 5k off the i386 libc.so with -Os. many of the
    improvements are in syscall wrappers, where the benefit is just size
    and performance improvement is unmeasurable noise amid the syscall
    overhead. however, stdio may be measurably faster.
    
    if in the future there are toolchains that can do the same thing
    globally without introducing linking bugs, it might be worth
    considering removing these workarounds.
    607b05ac
syscall.h 4.8 KB