aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1993-06-15 23:29:48 +0000
committerKen Raeburn <raeburn@cygnus>1993-06-15 23:29:48 +0000
commit638616cafba99486051fa2e5394ee2cb192547fa (patch)
treeedb284747abb9e1edd6eb8604e09ce4ac08c8a10
parentbf16876816142ecb93ec2a83acdd24180a4a9ee9 (diff)
downloadgdb-638616cafba99486051fa2e5394ee2cb192547fa.zip
gdb-638616cafba99486051fa2e5394ee2cb192547fa.tar.gz
gdb-638616cafba99486051fa2e5394ee2cb192547fa.tar.bz2
Second try at getting elfNAME macros right.
Under ANSI C, "32_" is not a valid pp-token...
-rw-r--r--bfd/libelf.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/bfd/libelf.h b/bfd/libelf.h
index 39c0c20..1f5d6a4 100644
--- a/bfd/libelf.h
+++ b/bfd/libelf.h
@@ -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;