Fix implib test failures
[deliverable/binutils-gdb.git] / include / nlm / common.h
index e96550a92f6dafb60b73d78153daf8b1ecf1f7a0..697126cc17de4501291056fef0ed7b2c394f86ce 100644 (file)
@@ -1,60 +1,59 @@
 /* NLM (NetWare Loadable Module) support for BFD.
-   Copyright (C) 1993 Free Software Foundation, Inc.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support
 
-This file is part of BFD, the Binary File Descriptor library.
+   This file is part of BFD, the Binary File Descriptor library.
 
-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
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   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
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 /* This file is part of NLM support for BFD, and contains the portions
-   that are common to both the internal and external representations. */
-
-/* Semi-portable string concatenation in cpp.
-   The NLM_CAT4 hack is to avoid a problem with some strict ANSI C
-   preprocessors.  The problem is, "32_" or "64_" are not a valid
-   preprocessing tokens, and we don't want extra underscores (e.g.,
-   "nlm_32_").  The XNLM_CAT2 macro will cause the inner NLM_CAT macros
-   to be evaluated first, producing still-valid pp-tokens.  Then the
-   final concatenation can be done.  (Sigh.)  */
-
-#ifdef SABER
-#  define NLM_CAT(a,b)         a##b
-#  define NLM_CAT3(a,b,c)      a##b##c
-#  define NLM_CAT4(a,b,c,d)    a##b##c##d
-#else
-#  ifdef __STDC__
-#    define NLM_CAT(a,b)       a##b
-#    define NLM_CAT3(a,b,c)    a##b##c
-#    define XNLM_CAT2(a,b)     NLM_CAT(a,b)
-#    define NLM_CAT4(a,b,c,d)  XNLM_CAT2(NLM_CAT(a,b),NLM_CAT(c,d))
-#  else
-#    define NLM_CAT(a,b)       a/**/b
-#    define NLM_CAT3(a,b,c)    a/**/b/**/c
-#    define NLM_CAT4(a,b,c,d)  a/**/b/**/c/**/d
-#  endif
-#endif
+   that are common to both the internal and external representations.  */
 
 /* If NLM_ARCH_SIZE is not defined, default to 32.  NLM_ARCH_SIZE is
-   optionally defined by the application. */
+   optionally defined by the application.  */
 
 #ifndef NLM_ARCH_SIZE
 #  define NLM_ARCH_SIZE                        32
 #endif
 
+/* Due to horrible details of ANSI macro expansion, we can't use CONCAT4
+   for NLM_NAME.  CONCAT2 is used in BFD_JUMP_TABLE macros, and some of
+   them will expand to tokens that themselves are macros defined in terms
+   of NLM_NAME.  If NLM_NAME were defined using CONCAT4 (which is itself
+   defined in bfd-in.h using CONCAT2), ANSI preprocessor rules say that
+   the CONCAT2 within NLM_NAME should not be expanded.
+   So use another name.  */
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#ifdef SABER
+#define NLM_CAT4(a,b,c,d) a##b##c##d
+#else
+/* This hack is to avoid a problem with some strict ANSI C preprocessors.
+   The problem is, "32_" is not a valid preprocessing token, and we don't
+   want extra underscores (e.g., "nlm_32_").  The NLM_XCAT2 macro will
+   cause the inner CAT2 macros to be evaluated first, producing
+   still-valid pp-tokens.  Then the final concatenation can be done.  */
+#define NLM_CAT2(a,b)    a##b
+#define NLM_XCAT2(a,b)   NLM_CAT2(a,b)
+#define NLM_CAT4(a,b,c,d) NLM_XCAT2(NLM_CAT2(a,b),NLM_CAT2(c,d))
+#endif
+#else
+#define NLM_CAT4(a,b,c,d) a/**/b/**/c/**/d
+#endif
+
 #if NLM_ARCH_SIZE == 32
 #  define NLM_TARGET_LONG_SIZE         4
 #  define NLM_TARGET_ADDRESS_SIZE      4
This page took 0.024983 seconds and 4 git commands to generate.