Second try at getting elfNAME macros right.
authorKen Raeburn <raeburn@cygnus>
Tue, 15 Jun 1993 23:29:48 +0000 (23:29 +0000)
committerKen Raeburn <raeburn@cygnus>
Tue, 15 Jun 1993 23:29:48 +0000 (23:29 +0000)
Under ANSI C, "32_" is not a valid pp-token...

bfd/libelf.h

index 39c0c20ec2bbc9b5deecf2795815b67489b7080e..1f5d6a4777efb81ce177b97d0ff2d6da8ed88cd4 100644 (file)
@@ -25,18 +25,29 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "elf/internal.h"
 #include "elf/external.h"
 
+/* This CAT4 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., "elf_32_").  The XCAT2 macro will cause the
+   inner CAT macros to be evaluated first, producing still-valid pp-tokens.
+   Then the final concatenation can be done.  (Sigh.)  */
+#ifdef __STDC__
+#define XCAT2(a,b)     CAT(a,b)
+#define CAT4(a,b,c,d)  XCAT2(CAT(a,b),CAT(c,d))
+#else
+#define CAT4(a,b,c,d)  a/**/b/**/c/**/d
+#endif
+
 #ifndef NAME
 #if ARCH_SIZE==64
-#define NAME(x,y) CAT3(x,64_,y)
-#define ElfNAME(X)     CAT(Elf64_,X)
-#define elfNAME(X)     CAT(elf64_,X)
+#define NAME(x,y) CAT4(x,64,_,y)
 #else /* ARCH_SIZE==32 */
-#define NAME(x,y) CAT3(x,32_,y)
-#define ElfNAME(X)     CAT(Elf32_,X)
-#define elfNAME(X)     CAT(elf32_,X)
+#define NAME(x,y) CAT4(x,32,_,y)
 #endif
 #endif
 
+#define ElfNAME(X)     NAME(Elf,X)
+#define elfNAME(X)     NAME(elf,X)
+
 typedef struct
 {
   asymbol symbol;