[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