aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenno Rice <benno@FreeBSD.org>2002-05-17 01:58:55 +0000
committerBenno Rice <benno@FreeBSD.org>2002-05-17 01:58:55 +0000
commitc2cba7c501f982b05601698b0d1f24c4b18d48fa (patch)
tree9cac604ff2b2c2ce235a5a2a073ce58f1bbe7442
parentf5ba2b905e4e5eab0344e19d0241d914da03b65e (diff)
downloadsrc-c2cba7c501f982b05601698b0d1f24c4b18d48fa.tar.gz
src-c2cba7c501f982b05601698b0d1f24c4b18d48fa.zip
Flesh this out, based on the NetBSD version.
Reviewed by: obrien
Notes
Notes: svn path=/head/; revision=96775
-rw-r--r--lib/libc/powerpc/SYS.h51
1 files changed, 41 insertions, 10 deletions
diff --git a/lib/libc/powerpc/SYS.h b/lib/libc/powerpc/SYS.h
index dc0cd0231835..cda37cd81e2c 100644
--- a/lib/libc/powerpc/SYS.h
+++ b/lib/libc/powerpc/SYS.h
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2002 David E. O'Brien. All rights reserved.
+ * Copyright (c) 2002 Benno Rice. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,18 +31,48 @@
*/
#include <sys/syscall.h>
+
#include <machine/asm.h>
+#define __CONCAT(x,y) x ## y
+
+#define _SYSCALL(x) \
+ .text; \
+ .align 2; \
+ li 0,(__CONCAT(SYS_,x)); \
+ sc
-#define SYSCALL(x) \
- .text ; \
- .align 2 ; \
-2: b PIC_PLT(_C_LABEL(__cerror)) ; \
-ENTRY(__CONCAT(__sys_,x)) ; \
- li 0,(SYS_ ## x) ; \
- sc ; \
+#define SYSCALL(x) \
+ .text; \
+ .align 2; \
+2: b PIC_PLT(_C_LABEL(HIDENAME(cerror))); \
+ENTRY(__CONCAT(__sys_,x)); \
+ .weak _C_LABEL(x); \
+ .set _C_LABEL(x),_C_LABEL(__CONCAT(__sys_,x)); \
+ .weak _C_LABEL(__CONCAT(_,x)); \
+ .set _C_LABEL(__CONCAT(_,x)),_C_LABEL(__CONCAT(__sys_,x)); \
+ _SYSCALL(x); \
bso 2b
-#define RSYSCALL(x) \
- SYSCALL(x) ; \
- blr
+#define PSEUDO(x) \
+ .text; \
+ .align 2; \
+ENTRY(__CONCAT(__sys_,x)); \
+ .weak _C_LABEL(__CONCAT(_,x)); \
+ .set _C_LABEL(__CONCAT(_,x)),_C_LABEL(__CONCAT(__sys_,x)); \
+ _SYSCALL(x); \
+ bnslr; \
+ b PIC_PLT(_C_LABEL(HIDENAME(cerror)))
+
+#define RSYSCALL(x) \
+ .text; \
+ .align 2; \
+2: b PIC_PLT(_C_LABEL(HIDENAME(cerror))); \
+ENTRY(__CONCAT(__sys_,x)); \
+ .weak _C_LABEL(x); \
+ .set _C_LABEL(x),_C_LABEL(__CONCAT(__sys_,x)); \
+ .weak _C_LABEL(__CONCAT(_,x)); \
+ .set _C_LABEL(__CONCAT(_,x)),_C_LABEL(__CONCAT(__sys_,x)); \
+ _SYSCALL(x); \
+ bnslr; \
+ b PIC_PLT(_C_LABEL(HIDENAME(cerror)))