[K42-discussion] [PATCH] These macros declare functions as both 'extern' and 'static'. This is strongly discouraged by the c++ spec and gcc 4 will not allow it. Instead, iso c++ suggests wrapping your extern functions in anonymous namespaces. See ISO-14882 7.3.1.1. Compiles correctly with both gcc 3 and gcc 4.1.

Donour Sizemore donour at cs.unm.edu
Tue Oct 3 09:26:52 EST 2006


Signed-off-by: Donour Sizemore <donour at milhouse.localdomain>
---
  .../lib/emu/arch/powerpc/SysCallTableMacros.H      |   77 
++++++++++++-----------
  1 files changed, 40 insertions(+), 37 deletions(-)

diff --git a/kitch-linux/lib/emu/arch/powerpc/SysCallTableMacros.H 
b/kitch-linux/lib/emu/arch/powerpc/SysCallTableMacros.H
index a965607..16fe552 100644
--- a/kitch-linux/lib/emu/arch/powerpc/SysCallTableMacros.H
+++ b/kitch-linux/lib/emu/arch/powerpc/SysCallTableMacros.H
@@ -65,44 +65,47 @@ #define TRACED_SYSCALL(x, fmt, sfmt, sig
          return ret; 										\
  }

-#define SYSCALL_DECLARE(x, fmt, sfmt, sign, issign) \
-extern "C" uval __k42_linux_##x( uval a, uval b, uval c, uval d, uval 
e, uval f, uval stkPtr); \
-extern "C" static uval __trc_k42_linux_##issign##x( uval a, uval b, 
uval c, uval d, uval e, uval f, uval stkPtr); \
-static uval __trc_k42_linux_##issign##x( uval a, uval b, uval c, uval 
d, uval e, uval f, uval stkPtr) \
-	TRACED_SYSCALL(x, fmt, sfmt, sign, issign, __k42_linux_##x)					\
-extern "C" static uval __traced_##issign##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr); \
-static uval __traced##issign##_##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr)                \
-        TRACED_PROC_SYSCALL(x, fmt, sfmt, sign, issign, __k42_linux_##x)
-
+#define SYSCALL_DECLARE(x, fmt, sfmt, sign, issign) 
                                            \
+namespace{ 
                                            \
+  extern "C" uval __k42_linux_##x( uval a, uval b, uval c, uval d, uval 
e, uval f, uval stkPtr);                  \
+  extern "C" uval __trc_k42_linux_##issign##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr)       \
+	TRACED_SYSCALL(x, fmt, sfmt, sign, issign, __k42_linux_##x)					 
     \
+  extern "C" uval __traced_##issign##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr);             \
+  extern "C" uval __traced##issign##_##x( uval a, uval b, uval c, uval 
d, uval e, uval f, uval stkPtr)            \
+        TRACED_PROC_SYSCALL(x, fmt, sfmt, sign, issign, 
__k42_linux_##x)     					  \
+}

  extern "C" signed long __k42_linux_emulNoSupport (const char *, signed 
long);
-#define SYSCALL_NYS(x, fmt, sfmt, sign, issign, rc) \
-extern "C" static uval __NYS##issign##_##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr);       \
-static uval __NYS##issign##_##x(uval a, uval b, uval c, uval d, uval e, 
uval f, uval stkPtr) {\
-        return (__k42_linux_emulNoSupport (__PRETTY_FUNCTION__,-(rc))); \
-}  \
-extern "C" static uval __trc_NYS##issign##_##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr);       \
-static uval __trc_NYS##issign##_##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr)       \
-	TRACED_SYSCALL(x, fmt, sfmt, sign, issign, __NYS##issign##_##x)					\
-static uval __NYStraced##issign##_##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr)   \
-        TRACED_PROC_SYSCALL(x, fmt, sfmt, sign, issign, 
__NYS##issign##_##x)
+#define SYSCALL_NYS(x, fmt, sfmt, sign, issign, rc) 
                                     \
+namespace { 
                                     \
+  extern "C" uval __NYS##issign##_##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr);       \
+  extern "C" uval __NYS##issign##_##x(uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr) {       \
+        return (__k42_linux_emulNoSupport (__PRETTY_FUNCTION__,-(rc))); 
                                    \
+  } 
                                     \
+  extern "C" uval __trc_NYS##issign##_##x( uval a, uval b, uval c, uval 
d, uval e, uval f, uval stkPtr);   \
+  extern "C" uval __trc_NYS##issign##_##x( uval a, uval b, uval c, uval 
d, uval e, uval f, uval stkPtr)    \
+	TRACED_SYSCALL(x, fmt, sfmt, sign, issign, __NYS##issign##_##x)				 	   \
+  extern"C" uval __NYStraced##issign##_##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr)   \
+        TRACED_PROC_SYSCALL(x, fmt, sfmt, sign, issign, 
__NYS##issign##_##x)                               \
+}
+
+#define SYSCALL_SIGNEXTEND(x, sign)                              \
+namespace{                                                       \
+extern "C" uval __trc_signextend_##x(                            \
+                       uval a, uval b, uval c, uval d, uval e,   \
+                       uval f, uval stkPtr) {                    \
+             sign;                                               \
+             uval ret = __trc_k42_linux_##x(a,b,c,d,e,f,stkPtr); \
+             return ret;                                         \
+            }                                                    \
+}

-#define SYSCALL_SIGNEXTEND(x, sign) \
-extern "C" static uval __trc_signextend_##x( \
-uval a, uval b, uval c, uval d, uval e, \
-uval f, uval stkPtr); \
-static uval __trc_signextend_##x( \
-uval a, uval b, uval c, uval d, uval e, \
-uval f, uval stkPtr) { \
-sign; \
-        uval ret = __trc_k42_linux_##x(a,b,c,d,e,f,stkPtr); \
-        return ret;}
-
-#define SYSCALL_NYI(x, fmt, sign, issign) \
-extern "C" static uval __NYI##issign##_##x( uval a, uval b, uval c, 
uval d, uval e, uval f, uval stkPtr); \
-static uval __NYI##issign##_##x( uval a, uval b, uval c, uval d, uval 
e, uval f, uval stkPtr) { \
-        sign; \
-        syserr_printf("%ld Syscall NYI: "#x " " fmt "\n", 
extRegsLocal.dispatcher->processID, a,b,c,d); \
-        passert(0,); \
-        return uval(-1); \
+#define SYSCALL_NYI(x, fmt, sign, issign) 
                                \
+namespace { 
                                \
+  extern "C" uval __NYI##issign##_##x( uval a, uval b, uval c, uval d, 
uval e, uval f, uval stkPtr) { \
+     sign; 
                                \
+     syserr_printf("%ld Syscall NYI: "#x " " fmt "\n", 
extRegsLocal.dispatcher->processID, a,b,c,d);  \
+     passert(0,); 
                                \
+     return uval(-1); 
                                \
+  } 
                                \
  }
-- 
1.4.1.1




More information about the K42-discussion mailing list