diff options
author | jasone <jasone@FreeBSD.org> | 2000-01-12 09:23:48 +0000 |
---|---|---|
committer | jasone <jasone@FreeBSD.org> | 2000-01-12 09:23:48 +0000 |
commit | 75903038bc52105bc7479fe5f2b75f22f10c1c50 (patch) | |
tree | c9e28eda650bbd7eaa3eb22c8d7c75d00a96a451 /lib/libc/i386 | |
parent | 688bb99b3f790aad607b949661d0361486bbe346 (diff) | |
download | FreeBSD-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.h | 23 | ||||
-rw-r--r-- | lib/libc/i386/SYS.h | 9 | ||||
-rw-r--r-- | lib/libc/i386/gen/_setjmp.S | 8 | ||||
-rw-r--r-- | lib/libc/i386/gen/setjmp.S | 10 | ||||
-rw-r--r-- | lib/libc/i386/gen/sigsetjmp.S | 10 |
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 |