X-Git-Url: https://ruderich.org/simon/gitweb/?p=coloredstderr%2Fcoloredstderr.git;a=blobdiff_plain;f=src%2Fcompiler.h;h=304521e03c5220752a354629345c772b7fc761d4;hp=85b58b1d90dc86e9f002c36099d156148cec50f6;hb=8a65b4486febf00e3fad5bafc3773a811e675a4c;hpb=1068648718dad86471451266fcdf4248bb79f3fe diff --git a/src/compiler.h b/src/compiler.h index 85b58b1..304521e 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -1,7 +1,7 @@ /* * Compiler specific macros. * - * Copyright (C) 2013 Simon Ruderich + * Copyright (C) 2013-2015 Simon Ruderich * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,10 +26,19 @@ # 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 unused +# define visibility_protected #endif /* Branch prediction information for the compiler. */