Automatically enable --unique=.text for elf32-hppa.
[deliverable/binutils-gdb.git] / include / ansidecl.h
index f5b61aa923484c4b2567d261de888dad36e5a893..e7852c6845886a50eaf1a888ad1fd25ecc7c025f 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI and traditional C compatability macros
-   Copyright 1991 Free Software Foundation, Inc.
+   Copyright 1991, 1992, 1996, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
 This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* ANSI and traditional C compatibility macros
 
@@ -24,12 +24,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    -----       ---- - ----------       ----------- - ----------
    PTR         `void *'                `char *'
    LONG_DOUBLE `long double'           `double'
-   CONST       `const'                 `'
    VOLATILE    `volatile'              `'
    SIGNED      `signed'                `'
    PTRCONST    `void *const'           `char *'
+   ANSI_PROTOTYPES  1                  not defined
 
-   DEFUN(name, arglist, args)
+   CONST is also defined, but is obsolete.  Just use const.
+
+   obsolete --     DEFUN (name, arglist, args)
 
        Defines function NAME.
 
@@ -41,22 +43,45 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        be separated with `AND'.  For functions with a variable number of
        arguments, the last thing listed should be `DOTS'.
 
-   DEFUN_VOID(name)
+   obsolete --     DEFUN_VOID (name)
 
        Defines a function NAME, which takes no arguments.
 
-   EXFUN(name, prototype)
+   obsolete --     EXFUN (name, (prototype))   -- obsolete.
 
-       Is used in an external function declaration.
-       In ANSI C it is `NAMEPROTOTYPE' (so PROTOTYPE should be enclosed in
+       Replaced by PARAMS.  Do not use; will disappear someday soon.
+       Was used in external function declarations.
+       In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
        parentheses).  In traditional C it is `NAME()'.
-       For a function that takes no arguments, PROTOTYPE should be `(NOARGS)'.
+       For a function that takes no arguments, PROTOTYPE should be `(void)'.
+
+   obsolete --     PROTO (type, name, (prototype)    -- obsolete.
+
+       This one has also been replaced by PARAMS.  Do not use.
+
+   PARAMS ((args))
+
+       We could use the EXFUN macro to handle prototype declarations, but
+       the name is misleading and the result is ugly.  So we just define a
+       simple macro to handle the parameter lists, as in:
+
+             static int foo PARAMS ((int, char));
+
+       This produces:  `static int foo();' or `static int foo (int, char);'
+
+       EXFUN would have done it like this:
 
-    For example:
-       extern int EXFUN(printf, (CONST char *format DOTS));
-       int DEFUN(fprintf, (stream, format),
-                 FILE *stream AND CONST char *format DOTS) { ... }
-       void DEFUN_VOID(abort) { ... }
+             static int EXFUN (foo, (int, char));
+
+       but the function is not external...and it's hard to visually parse
+       the function name out of the mess.   EXFUN should be considered
+       obsolete; new code should be written to use PARAMS.
+
+   DOTS is also obsolete.
+
+   Examples:
+
+       extern int printf PARAMS ((const char *format, ...));
 */
 
 #ifndef        _ANSIDECL_H
@@ -69,25 +94,37 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* LINTLIBRARY */
 
 
-#ifdef __STDC__
+#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32)
+/* All known AIX compilers implement these things (but don't always
+   define __STDC__).  The RISC/OS MIPS compiler defines these things
+   in SVR4 mode, but does not define __STDC__.  */
 
 #define        PTR             void *
 #define        PTRCONST        void *CONST
 #define        LONG_DOUBLE     long double
 
+#ifndef IN_GCC
 #define        AND             ,
 #define        NOARGS          void
-#define        CONST           const
 #define        VOLATILE        volatile
 #define        SIGNED          signed
-#define        DOTS            , ...
+#endif /* ! IN_GCC */
 
-#define        EXFUN(name, proto)              name proto
-#define        DEFUN(name, arglist, args)      name(args)
-#define        DEFUN_VOID(name)                name(NOARGS)
+#define PARAMS(paramlist)              paramlist
+#define ANSI_PROTOTYPES                        1
 
-#define PROTO(type, name, arglist) type name arglist
-#endif
+#define VPARAMS(ARGS)                  ARGS
+#define VA_START(va_list,var)          va_start(va_list,var)
+
+/* These are obsolete.  Do not use.  */
+#ifndef IN_GCC
+#define CONST                          const
+#define DOTS                           , ...
+#define PROTO(type, name, arglist)     type name arglist
+#define EXFUN(name, proto)             name proto
+#define DEFUN(name, arglist, args)     name(args)
+#define DEFUN_VOID(name)               name(void)
+#endif /* ! IN_GCC */
 
 #else  /* Not ANSI C.  */
 
@@ -95,18 +132,101 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define        PTRCONST        PTR
 #define        LONG_DOUBLE     double
 
+#ifndef IN_GCC
 #define        AND             ;
 #define        NOARGS
-#define        CONST
 #define        VOLATILE
 #define        SIGNED
-#define        DOTS
+#endif /* !IN_GCC */
+
+#ifndef const /* some systems define it in header files for non-ansi mode */
+#define        const
+#endif
+
+#define PARAMS(paramlist)              ()
+
+#define VPARAMS(ARGS)                  (va_alist) va_dcl
+#define VA_START(va_list,var)          va_start(va_list)
+
+/* These are obsolete.  Do not use.  */
+#ifndef IN_GCC
+#define CONST
+#define DOTS
+#define PROTO(type, name, arglist)     type name ()
+#define EXFUN(name, proto)             name()
+#define DEFUN(name, arglist, args)     name arglist args;
+#define DEFUN_VOID(name)               name()
+#endif /* ! IN_GCC */
 
-#define        EXFUN(name, proto)              name()
-#define        DEFUN(name, arglist, args)      name arglist args;
-#define        DEFUN_VOID(name)                name()
-#define PROTO(type, name, arglist) type name ()
 #endif /* ANSI C.  */
 
 
+/* Using MACRO(x,y) in cpp #if conditionals does not work with some
+   older preprocessors.  Thus we can't define something like this:
+
+#define HAVE_GCC_VERSION(MAJOR, MINOR) \
+  (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
+
+and then test "#if HAVE_GCC_VERSION(2,7)".
+
+So instead we use the macro below and test it against specific values.  */
+
+/* This macro simplifies testing whether we are using gcc, and if it
+   is of a particular minimum version. (Both major & minor numbers are
+   significant.)  This macro will evaluate to 0 if we are not using
+   gcc at all.  */
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif /* GCC_VERSION */
+
+/* Define macros for some gcc attributes.  This permits us to use the
+   macros freely, and know that they will come into play for the
+   version of gcc in which they are supported.  */
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
+#ifndef ATTRIBUTE_MALLOC
+# if (GCC_VERSION >= 2096)
+#  define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define ATTRIBUTE_MALLOC
+# endif /* GNUC >= 2.96 */
+#endif /* ATTRIBUTE_MALLOC */
+
+/* Attributes on labels were valid as of gcc 2.93. */
+#ifndef ATTRIBUTE_UNUSED_LABEL
+# if (GCC_VERSION >= 2093)
+#  define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
+# else
+#  define ATTRIBUTE_UNUSED_LABEL
+# endif /* GNUC >= 2.93 */
+#endif /* ATTRIBUTE_UNUSED_LABEL */
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif /* ATTRIBUTE_UNUSED */
+
+#ifndef ATTRIBUTE_NORETURN
+#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif /* ATTRIBUTE_NORETURN */
+
+#ifndef ATTRIBUTE_PRINTF
+#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
+#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
+#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
+#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
+#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
+#endif /* ATTRIBUTE_PRINTF */
+
+/* We use __extension__ in some places to suppress -pedantic warnings
+   about GCC extensions.  This feature didn't work properly before
+   gcc 2.8.  */
+#if GCC_VERSION < 2008
+#define __extension__
+#endif
+
 #endif /* ansidecl.h   */
This page took 0.02553 seconds and 4 git commands to generate.