X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4ed774157d1687cc5236ecaf088dc48442e92431..aac6be13316f360bb2df46d6708ad9eea6059dc5:/src/conf_post.h diff --git a/src/conf_post.h b/src/conf_post.h index 786105864f..a995acfd91 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -1,6 +1,6 @@ /* conf_post.h --- configure.ac includes this via AH_BOTTOM -Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2013 Free Software +Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -32,6 +32,17 @@ along with GNU Emacs. If not, see . */ # include config_opsysfile #endif +#include + +/* The type of bool bitfields. Needed to compile Objective-C with + standard GCC. It was also needed to port to pre-C99 compilers, + although we don't care about that any more. */ +#if NS_IMPL_GNUSTEP +typedef unsigned int bool_bf; +#else +typedef bool bool_bf; +#endif + #ifndef WINDOWSNT /* On AIX 3 this must be included before any other include file. */ #include @@ -40,8 +51,19 @@ along with GNU Emacs. If not, see . */ #endif #endif +/* When not using Clang, assume its attributes and features are absent. */ #ifndef __has_attribute -# define __has_attribute(a) 0 /* non-clang */ +# define __has_attribute(a) false +#endif +#ifndef __has_feature +# define __has_feature(a) false +#endif + +/* True if addresses are being sanitized. */ +#if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer) +# define ADDRESS_SANITIZER true +#else +# define ADDRESS_SANITIZER false #endif #ifdef DARWIN_OS @@ -49,8 +71,6 @@ along with GNU Emacs. If not, see . */ #define malloc unexec_malloc #define realloc unexec_realloc #define free unexec_free -/* Don't use posix_memalign because it is not compatible with unexmacosx.c. */ -#undef HAVE_POSIX_MEMALIGN #endif /* The following solves the problem that Emacs hangs when evaluating (make-comint "test0" "/nodir/nofile" nil "") when /nodir/nofile @@ -68,10 +88,6 @@ along with GNU Emacs. If not, see . */ #ifdef HPUX #undef srandom #undef random -/* We try to avoid checking for random and rint on hpux in - configure.ac, but some other configure test might check for them as - a dependency, so to be safe we also undefine them here. - */ #undef HAVE_RANDOM #undef HAVE_RINT #endif /* HPUX */ @@ -80,7 +96,8 @@ along with GNU Emacs. If not, see . */ #ifdef emacs char *_getpty(); #endif - +#define INET6 /* Needed for struct sockaddr_in6. */ +#undef HAVE_GETADDRINFO /* IRIX has getaddrinfo but not struct addrinfo. */ #endif /* IRIX6_5 */ #ifdef MSDOS @@ -101,6 +118,11 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ #else # define lstat stat #endif + +/* We must intercept 'opendir' calls to stash away the directory name, + so we could reuse it in readlinkat; see msdos.c. */ +#define opendir sys_opendir + /* The "portable" definition of _GL_INLINE on config.h does not work with DJGPP GCC 3.4.4: it causes unresolved externals in sysdep.c, although lib/execinfo.h is included and the inline functions there @@ -112,6 +134,9 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ #define emacs_raise(sig) msdos_fatal_signal (sig) +/* DATA_START is needed by vm-limit.c and unexcoff.c. */ +#define DATA_START (&etext + 1) + /* Define one of these for easier conditionals. */ #ifdef HAVE_X_WINDOWS /* We need a little extra space, see ../../lisp/loadup.el and the @@ -128,7 +153,7 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ directory tree). Given the unknown policy of different DPMI hosts regarding loading of untouched pages, I'm not going to risk enlarging Emacs footprint by another 100+ KBytes. */ -#define SYSTEM_PURESIZE_EXTRA (-170000+65000) +#define SYSTEM_PURESIZE_EXTRA (-170000+90000) #endif #endif /* MSDOS */ @@ -142,6 +167,10 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ #endif #endif +#ifdef CYGWIN +#define SYSTEM_PURESIZE_EXTRA 10000 +#endif + #if defined HAVE_NTGUI && !defined DebPrint # ifdef EMACSDEBUG extern void _DebPrint (const char *fmt, ...); @@ -196,6 +225,46 @@ extern void _DebPrint (const char *fmt, ...); #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST +#if 3 <= __GNUC__ +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define ATTRIBUTE_MALLOC +#endif + +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +# define ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +#else +# define ATTRIBUTE_ALLOC_SIZE(args) +#endif + +#define ATTRIBUTE_MALLOC_SIZE(args) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE (args) + +/* Work around GCC bug 59600: when a function is inlined, the inlined + code may have its addresses sanitized even if the function has the + no_sanitize_address attribute. This bug is fixed in GCC 4.9.0 and + clang 3.4. */ +#if (! ADDRESS_SANITIZER \ + || ((4 < __GNUC__ + (9 <= __GNUC_MINOR__)) \ + || 3 < __clang_major__ + (4 <= __clang_minor__))) +# define ADDRESS_SANITIZER_WORKAROUND /* No workaround needed. */ +#else +# define ADDRESS_SANITIZER_WORKAROUND NO_INLINE +#endif + +/* Attribute of functions whose code should not have addresses + sanitized. */ + +#if (__has_attribute (no_sanitize_address) \ + || 4 < __GNUC__ + (8 <= __GNUC_MINOR__)) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS \ + __attribute__ ((no_sanitize_address)) ADDRESS_SANITIZER_WORKAROUND +#elif __has_attribute (no_address_safety_analysis) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS \ + __attribute__ ((no_address_safety_analysis)) ADDRESS_SANITIZER_WORKAROUND +#else +# define ATTRIBUTE_NO_SANITIZE_ADDRESS +#endif + /* Some versions of GNU/Linux define noinline in their headers. */ #ifdef noinline #undef noinline @@ -239,13 +308,12 @@ extern void _DebPrint (const char *fmt, ...); /* To use the struct hack with N elements, declare the struct like this: struct s { ...; t name[FLEXIBLE_ARRAY_MEMBER]; }; - and allocate (offsetof (struct s, name) + N * sizeof (t)) bytes. */ -#if 199901 <= __STDC_VERSION__ -# define FLEXIBLE_ARRAY_MEMBER -#elif __GNUC__ && !defined __STRICT_ANSI__ -# define FLEXIBLE_ARRAY_MEMBER 0 -#else + and allocate (offsetof (struct s, name) + N * sizeof (t)) bytes. + IBM xlc 12.1 claims to do C99 but mishandles flexible array members. */ +#ifdef __IBMC__ # define FLEXIBLE_ARRAY_MEMBER 1 +#else +# define FLEXIBLE_ARRAY_MEMBER #endif /* Use this to suppress gcc's `...may be used before initialized' warnings. */