summaryrefslogtreecommitdiffstats
path: root/lib/libc/i386
diff options
context:
space:
mode:
authorjasone <jasone@FreeBSD.org>2000-01-12 09:23:48 +0000
committerjasone <jasone@FreeBSD.org>2000-01-12 09:23:48 +0000
commit75903038bc52105bc7479fe5f2b75f22f10c1c50 (patch)
treec9e28eda650bbd7eaa3eb22c8d7c75d00a96a451 /lib/libc/i386
parent688bb99b3f790aad607b949661d0361486bbe346 (diff)
downloadFreeBSD-src-75903038bc52105bc7479fe5f2b75f22f10c1c50.zip
FreeBSD-src-75903038bc52105bc7479fe5f2b75f22f10c1c50.tar.gz
Add three-tier symbol naming in support of POSIX thread cancellation
points. For library functions, the pattern is __sleep() <-- _libc_sleep() <-- sleep(). The arrows represent weak aliases. For system calls, the pattern is _read() <-- _libc_read() <-- read().
Diffstat (limited to 'lib/libc/i386')
-rw-r--r--lib/libc/i386/DEFS.h23
-rw-r--r--lib/libc/i386/SYS.h9
-rw-r--r--lib/libc/i386/gen/_setjmp.S8
-rw-r--r--lib/libc/i386/gen/setjmp.S10
-rw-r--r--lib/libc/i386/gen/sigsetjmp.S10
5 files changed, 48 insertions, 12 deletions
diff --git a/lib/libc/i386/DEFS.h b/lib/libc/i386/DEFS.h
index edf08ea..0e54055 100644
--- a/lib/libc/i386/DEFS.h
+++ b/lib/libc/i386/DEFS.h
@@ -39,3 +39,26 @@
*/
#include <machine/asm.h>
+
+/* Already defined in machine/asm.h. */
+#undef ENTRY
+
+#define MCOUNT call PIC_PLT(HIDENAME(mcount))
+#define MEXITCOUNT call PIC_PLT(HIDENAME(mexitcount))
+
+#ifdef PROF
+/*
+ * XXX Looks good to me, but it sure looks different than the original...
+ * (jasone)
+ */
+#define ENTRY(name) _ENTRY(name) ; 9: ; MCOUNT
+/* #define ENTRY(name) _ENTRY(name) ; 9: \ */
+/* pushl %ebp; movl %esp,%ebp; \ */
+/* call PIC_PLT(HIDENAME(mcount)); \ */
+/* popl %ebp */
+
+#define ALTENTRY(name) _ENTRY(name) ; MCOUNT ; MEXITCOUNT ; jmp 9f
+#else
+#define ENTRY(name) _ENTRY(name)
+#define ALTENTRY(name) _ENTRY(name)
+#endif
diff --git a/lib/libc/i386/SYS.h b/lib/libc/i386/SYS.h
index a5daa1c..5061052 100644
--- a/lib/libc/i386/SYS.h
+++ b/lib/libc/i386/SYS.h
@@ -43,15 +43,20 @@
#define SYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
ENTRY(__CONCAT(_,x)); \
+ .weak CNAME(__CONCAT(_libc_,x)); \
+ .set CNAME(__CONCAT(_libc_,x)),CNAME(__CONCAT(_,x)); \
.weak CNAME(x); \
- .set CNAME(x),CNAME(__CONCAT(_,x)); \
+ .set CNAME(x),CNAME(__CONCAT(_libc_,x)); \
lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b
#define RSYSCALL(x) SYSCALL(x); ret
#define PSEUDO(x,y) ENTRY(__CONCAT(_,x)); \
+ .weak CNAME(__CONCAT(_libc_,x)); \
+ .set CNAME(__CONCAT(_libc_,x)),CNAME(__CONCAT(_,x)); \
.weak CNAME(x); \
- .set CNAME(x),CNAME(__CONCAT(_,x)); \
+ .set CNAME(x),CNAME(__CONCAT(_libc_,x)); \
lea __CONCAT(SYS_,y), %eax; KERNCALL; ret
+
/* gas messes up offset -- although we don't currently need it, do for BCS */
#define LCALL(x,y) .byte 0x9a ; .long y; .word x
diff --git a/lib/libc/i386/gen/_setjmp.S b/lib/libc/i386/gen/_setjmp.S
index c8a1d21..21ab880f 100644
--- a/lib/libc/i386/gen/_setjmp.S
+++ b/lib/libc/i386/gen/_setjmp.S
@@ -53,7 +53,9 @@
#include "DEFS.h"
-ENTRY(_setjmp)
+ALTENTRY(_setjmp)
+ALTENTRY(_libc__setjmp)
+ENTRY(___setjmp)
movl 4(%esp),%eax
movl 0(%esp),%edx
movl %edx, 0(%eax) /* rta */
@@ -66,7 +68,9 @@ ENTRY(_setjmp)
xorl %eax,%eax
ret
-ENTRY(_longjmp)
+ALTENTRY(_longjmp)
+ALTENTRY(_libc__longjmp)
+ENTRY(___longjmp)
movl 4(%esp),%edx
movl 8(%esp),%eax
movl 0(%edx),%ecx
diff --git a/lib/libc/i386/gen/setjmp.S b/lib/libc/i386/gen/setjmp.S
index d1c08b9..4162c1e 100644
--- a/lib/libc/i386/gen/setjmp.S
+++ b/lib/libc/i386/gen/setjmp.S
@@ -54,8 +54,9 @@
#include "DEFS.h"
#include "SYS.h"
-.globl CNAME(__setjmp); CNAME(__setjmp):
-ENTRY(setjmp)
+ALTENTRY(setjmp)
+ALTENTRY(_libc_setjmp)
+ENTRY(__setjmp)
movl 4(%esp),%ecx
PIC_PROLOGUE
leal 28(%ecx), %eax
@@ -81,8 +82,9 @@ ENTRY(setjmp)
xorl %eax,%eax
ret
-.globl CNAME(__longjmp); CNAME(__longjmp):
-ENTRY(longjmp)
+ALTENTRY(longjmp)
+ALTENTRY(_libc_longjmp)
+ENTRY(__longjmp)
movl 4(%esp),%edx
PIC_PROLOGUE
pushl $0 /* (sigset_t*)oset */
diff --git a/lib/libc/i386/gen/sigsetjmp.S b/lib/libc/i386/gen/sigsetjmp.S
index 7338e1c..09ca554 100644
--- a/lib/libc/i386/gen/sigsetjmp.S
+++ b/lib/libc/i386/gen/sigsetjmp.S
@@ -59,8 +59,9 @@
* use sigreturn() if sigreturn() works.
*/
-.globl CNAME(__sigsetjmp); CNAME(__sigsetjmp):
-ENTRY(sigsetjmp)
+ALTENTRY(sigsetjmp)
+ALTENTRY(_libc_sigsetjmp)
+ENTRY(__sigsetjmp)
movl 8(%esp),%eax
movl 4(%esp),%ecx
movl %eax,44(%ecx)
@@ -90,8 +91,9 @@ ENTRY(sigsetjmp)
xorl %eax,%eax
ret
-.globl CNAME(__siglongjmp); CNAME(__siglongjmp):
-ENTRY(siglongjmp)
+ALTENTRY(siglongjmp)
+ALTENTRY(_libc_siglongjmp)
+ENTRY(__siglongjmp)
movl 4(%esp),%edx
cmpl $0,44(%edx)
jz 2f
OpenPOWER on IntegriCloud