X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fcompiler.h;h=2715d91b6a921b598a043d56b289c3fe1f89299f;hb=545c6af1daceb29e4a9dc419273a3f2339dfaa7c;hp=3d92f2fac5f1e05eef2a93f4191e1dd489465df7;hpb=048bd6f9e7f316aafede310ba273776d0086b8ed;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/compiler.h b/src/compiler.h index 3d92f2f..2715d91 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -1,7 +1,7 @@ /* * Compiler specific macros. * - * Copyright (C) 2013 Simon Ruderich + * Copyright (C) 2013-2018 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 @@ -20,6 +20,27 @@ #ifndef COMPILER_H #define COMPILER_H 1 +#ifdef HAVE___ATTRIBUTE__ +/* 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 unused +# define visibility_protected +#endif + /* Branch prediction information for the compiler. */ #ifdef HAVE___BUILTIN_EXPECT # define likely(x) __builtin_expect(!!(x), 1)