X-Git-Url: https://ruderich.org/simon/gitweb/?p=coloredstderr%2Fcoloredstderr.git;a=blobdiff_plain;f=src%2Fcompiler.h;h=d1c12dc05719262b64443366e0fb817138d7da42;hp=9e23e238efa2c30ec52e9be5a20f50b7ef097876;hb=a58d1a9017a1a15a237f5b516fe2c44a0f01482e;hpb=0a2617527c9b46a587a8f34571a54347cd5c4b5a diff --git a/src/compiler.h b/src/compiler.h index 9e23e23..d1c12dc 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -20,15 +20,25 @@ #ifndef COMPILER_H #define COMPILER_H 1 -/* Prevent/force inlining. Used to improve performance. */ -#undef __noinline -#undef __always_inline #ifdef HAVE___ATTRIBUTE__ -# define __noinline __attribute__((noinline)) -# define __always_inline __attribute__((always_inline)) +/* Prevent/force inlining. Used to improve performance. */ +# define noinline __attribute__((noinline)) +# define always_inline __attribute__((always_inline)) +/* Unused parameter. */ +# define unused __attribute__((unused)) +/* Mark the function protected, which means it can't be overwritten by other + * modules (libraries), e.g. with LD_PRELOAD); otherwise same as the default + * visibility. This causes the compiler not use the PLT (and no relocations) + * for local calls from inside this module; but the symbols are still + * exported. This is faster and in this case prevents useless lookups as we + * hook those functions and nobody else should modify them. Not strictly + * necessary, but nice to have. */ +# define visibility_protected __attribute__((visibility("protected"))) #else -# define __noinline -# define __always_inline +# define noinline +# define always_inline +# define unused +# define visibility_protected #endif /* Branch prediction information for the compiler. */