From 646c5b4840f4d31cf856f513b1e618d066a13058 Mon Sep 17 00:00:00 2001 From: Andreas Tobler Date: Thu, 21 Nov 2013 22:31:18 +0000 Subject: [PATCH] Replace the WEAK_ALIAS() alias with the WEAK_REFERENCE() alias. Use it and get rid of the __CONCAT and CNAME macros. Reviewed by: bde, kib --- lib/libc/i386/SYS.h | 25 ++++++++++------------ lib/libc/i386/gen/_setjmp.S | 3 +-- lib/libc/i386/gen/setjmp.S | 3 +-- lib/libc/i386/gen/sigsetjmp.S | 3 +-- lib/libc/i386/string/strchr.S | 2 +- lib/libc/i386/string/strrchr.S | 2 +- lib/libc/i386/sys/Ovfork.S | 6 ++---- lib/libc/i386/sys/getcontext.S | 6 ++---- lib/libkse/arch/i386/i386/thr_getcontext.S | 6 ++---- sys/i386/include/asm.h | 12 +++++++---- 10 files changed, 30 insertions(+), 38 deletions(-) diff --git a/lib/libc/i386/SYS.h b/lib/libc/i386/SYS.h index 355b117e9476..9a4856a4d3e2 100644 --- a/lib/libc/i386/SYS.h +++ b/lib/libc/i386/SYS.h @@ -36,22 +36,19 @@ #include #include -#define SYSCALL(x) ENTRY(__CONCAT(__sys_,x)); \ - .weak CNAME(x); \ - .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \ - .weak CNAME(__CONCAT(_,x)); \ - .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ - mov __CONCAT($SYS_,x),%eax; KERNCALL; \ - jb HIDENAME(cerror) +#define SYSCALL(name) ENTRY(__sys_##name); \ + WEAK_REFERENCE(__sys_##name, name); \ + WEAK_REFERENCE(__sys_##name, _##name); \ + mov $SYS_##name,%eax; KERNCALL; \ + jb HIDENAME(cerror) -#define RSYSCALL(x) SYSCALL(x); ret; END(__CONCAT(__sys_,x)) +#define RSYSCALL(name) SYSCALL(name); ret; END(__sys_##name) -#define PSEUDO(x) ENTRY(__CONCAT(__sys_,x)); \ - .weak CNAME(__CONCAT(_,x)); \ - .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ - mov __CONCAT($SYS_,x),%eax; KERNCALL; \ - jb HIDENAME(cerror); ret; \ - END(__CONCAT(__sys_,x)) +#define PSEUDO(name) ENTRY(__sys_##name); \ + WEAK_REFERENCE(__sys_##name, _##name); \ + mov $SYS_##name,%eax; KERNCALL; \ + jb HIDENAME(cerror); ret; \ + END(__sys_##name) /* 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 3d9fdb42c508..c5996c6029ca 100644 --- a/lib/libc/i386/gen/_setjmp.S +++ b/lib/libc/i386/gen/_setjmp.S @@ -60,8 +60,7 @@ ENTRY(_setjmp) ret END(_setjmp) - .weak CNAME(_longjmp) - .set CNAME(_longjmp),CNAME(___longjmp) + WEAK_REFERENCE(___longjmp, _longjmp) ENTRY(___longjmp) movl 4(%esp),%edx movl 8(%esp),%eax diff --git a/lib/libc/i386/gen/setjmp.S b/lib/libc/i386/gen/setjmp.S index a409e35e7212..6e15868a1901 100644 --- a/lib/libc/i386/gen/setjmp.S +++ b/lib/libc/i386/gen/setjmp.S @@ -78,8 +78,7 @@ ENTRY(setjmp) ret END(setjmp) - .weak CNAME(longjmp) - .set CNAME(longjmp),CNAME(__longjmp) + WEAK_REFERENCE(__longjmp, longjmp) ENTRY(__longjmp) movl 4(%esp),%edx PIC_PROLOGUE diff --git a/lib/libc/i386/gen/sigsetjmp.S b/lib/libc/i386/gen/sigsetjmp.S index 936edbae338c..0920b6da9956 100644 --- a/lib/libc/i386/gen/sigsetjmp.S +++ b/lib/libc/i386/gen/sigsetjmp.S @@ -87,8 +87,7 @@ ENTRY(sigsetjmp) ret END(sigsetjmp) - .weak CNAME(siglongjmp); - .set CNAME(siglongjmp),CNAME(__siglongjmp) + WEAK_REFERENCE(__siglongjmp, siglongjmp) ENTRY(__siglongjmp) movl 4(%esp),%edx cmpl $0,44(%edx) diff --git a/lib/libc/i386/string/strchr.S b/lib/libc/i386/string/strchr.S index f57c2cd8abe4..83aa87f1919e 100644 --- a/lib/libc/i386/string/strchr.S +++ b/lib/libc/i386/string/strchr.S @@ -63,6 +63,6 @@ L2: ret END(strchr) -WEAK_ALIAS(index, strchr) +WEAK_REFERENCE(strchr, index) .section .note.GNU-stack,"",%progbits diff --git a/lib/libc/i386/string/strrchr.S b/lib/libc/i386/string/strrchr.S index 5ec5287a4c68..5e250b0c91aa 100644 --- a/lib/libc/i386/string/strrchr.S +++ b/lib/libc/i386/string/strrchr.S @@ -64,6 +64,6 @@ L2: ret END(strrchr) -WEAK_ALIAS(rindex, strrchr) +WEAK_REFERENCE(strrchr, rindex) .section .note.GNU-stack,"",%progbits diff --git a/lib/libc/i386/sys/Ovfork.S b/lib/libc/i386/sys/Ovfork.S index 3ef716976942..b36492098806 100644 --- a/lib/libc/i386/sys/Ovfork.S +++ b/lib/libc/i386/sys/Ovfork.S @@ -38,10 +38,8 @@ __FBSDID("$FreeBSD$"); #include "SYS.h" - .weak _vfork - .set _vfork,__sys_vfork - .weak vfork - .set vfork,__sys_vfork + WEAK_REFERENCE(__sys_vfork, _vfork) + WEAK_REFERENCE(__sys_vfork, vfork) ENTRY(__sys_vfork) popl %ecx /* my rta into ecx */ mov $SYS_vfork,%eax diff --git a/lib/libc/i386/sys/getcontext.S b/lib/libc/i386/sys/getcontext.S index 7114689866e8..4923382e7368 100644 --- a/lib/libc/i386/sys/getcontext.S +++ b/lib/libc/i386/sys/getcontext.S @@ -34,10 +34,8 @@ __FBSDID("$FreeBSD$"); * Otherwise, the setcontext() syscall will return here and we'll * pop off the return address and go to the *setcontext* call. */ - .weak _getcontext - .set _getcontext,__sys_getcontext - .weak getcontext - .set getcontext,__sys_getcontext + WEAK_REFERENCE(__sys_getcontext, _getcontext) + WEAK_REFERENCE(__sys_getcontext, getcontext) ENTRY(__sys_getcontext) movl (%esp),%ecx /* save getcontext return address */ mov $SYS_getcontext,%eax diff --git a/lib/libkse/arch/i386/i386/thr_getcontext.S b/lib/libkse/arch/i386/i386/thr_getcontext.S index d9d300f7da83..35ac9c4d689f 100644 --- a/lib/libkse/arch/i386/i386/thr_getcontext.S +++ b/lib/libkse/arch/i386/i386/thr_getcontext.S @@ -50,8 +50,7 @@ __FBSDID("$FreeBSD$"); * * Returns 0 if there are no errors; -1 otherwise */ - .weak CNAME(_thr_setcontext) - .set CNAME(_thr_setcontext),CNAME(__thr_setcontext) + WEAK_REFERENCE(__thr_setcontext, _thr_setcontext) ENTRY(__thr_setcontext) movl 4(%esp), %edx /* get address of mcontext */ cmpl $0, %edx /* check for null pointer */ @@ -116,8 +115,7 @@ ENTRY(__thr_setcontext) * Returns -1 if there is an error, 0 no errors; 1 upon return * from a setcontext(). */ - .weak CNAME(_thr_getcontext) - .set CNAME(_thr_getcontext),CNAME(__thr_getcontext) + WEAK_REFERENCE(__thr_getcontext, _thr_getcontext) ENTRY(__thr_getcontext) pushl %edx /* save edx */ movl 8(%esp), %edx /* get address of mcontext */ diff --git a/sys/i386/include/asm.h b/sys/i386/include/asm.h index cc8bfe01219d..b2d4a6b28902 100644 --- a/sys/i386/include/asm.h +++ b/sys/i386/include/asm.h @@ -91,11 +91,15 @@ #endif /* - * WEAK_ALIAS: create a weak alias. + * WEAK_REFERENCE(): create a weak reference alias from sym. + * The macro is not a general asm macro that takes arbitrary names, + * but one that takes only C names. It does the non-null name + * translation inside the macro. */ -#define WEAK_ALIAS(alias,sym) \ - .weak alias; \ - alias = sym + +#define WEAK_REFERENCE(sym, alias) \ + .weak CNAME(alias); \ + .equ CNAME(alias),CNAME(sym) /* * STRONG_ALIAS: create a strong alias.