With this change noinline can be used in ldpreload.h.
#include <config.h>
+#include "compiler.h"
+
/* Must be loaded before the following headers. */
#include "ldpreload.h"
#include "constants.h"
-#include "compiler.h"
#ifdef DEBUG
# include "debug.h"
#endif
/* Prevent inlining into hook functions because it may increase the number of
* spilled registers unnecessarily. As it's not called very often accept the
* additional call. */
-static int isatty_noinline(int fd) __noinline;
+static int isatty_noinline(int fd) noinline;
static int isatty_noinline(int fd) {
int saved_errno = errno;
int result = isatty(fd);
/* Don't inline any of the pre/post functions. Keep the hook function as small
* as possible for speed reasons. */
-static void handle_fd_pre(int fd) __noinline;
-static void handle_fd_post(int fd) __noinline;
-static void handle_file_pre(FILE *stream) __noinline;
-static void handle_file_post(FILE *stream) __noinline;
+static void handle_fd_pre(int fd) noinline;
+static void handle_fd_post(int fd) noinline;
+static void handle_file_pre(FILE *stream) noinline;
+static void handle_file_post(FILE *stream) noinline;
static void handle_fd_pre(int fd) {
int saved_errno = errno;
#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))
+# define noinline __attribute__((noinline))
+# define always_inline __attribute__((always_inline))
#else
-# define __noinline
-# define __always_inline
+# define noinline
+# define always_inline
#endif
/* Branch prediction information for the compiler. */
#include <dlfcn.h>
#include <errno.h>
-static void *dlsym_function(char const *name)
-#ifdef HAVE___ATTRIBUTE__
- __attribute__((noinline))
-#endif
-;
-
+static void *dlsym_function(char const *name) noinline;
/* Load the function name using dlsym() and return it. Terminate program on
* failure. Split in function and macro to reduce code inserted into the
* function using the macro. */
return 0;
}
-static int tracked_fds_find_slow(int fd) __noinline;
+static int tracked_fds_find_slow(int fd) noinline;
/*
* tracked_fds_find() is called for each hook call and should be as fast as
* possible. As most file descriptors are < TRACKFDS_STATIC_COUNT, force the
* Inlining tracked_fds_add()/tracked_fds_remove() isn't worth the effort as
* they are not called often enough.
*/
-inline static int tracked_fds_find(int fd) __always_inline;
+inline static int tracked_fds_find(int fd) always_inline;
static int tracked_fds_find(int fd) {
if (fd < TRACKFDS_STATIC_COUNT) {
return tracked_fds[fd];