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
This commit is contained in:
Andreas Tobler 2013-11-21 22:31:18 +00:00
parent 3e5a0a6b70
commit 646c5b4840
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=258451
10 changed files with 30 additions and 38 deletions

View File

@ -36,22 +36,19 @@
#include <sys/syscall.h>
#include <machine/asm.h>
#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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -63,6 +63,6 @@ L2:
ret
END(strchr)
WEAK_ALIAS(index, strchr)
WEAK_REFERENCE(strchr, index)
.section .note.GNU-stack,"",%progbits

View File

@ -64,6 +64,6 @@ L2:
ret
END(strrchr)
WEAK_ALIAS(rindex, strrchr)
WEAK_REFERENCE(strrchr, rindex)
.section .note.GNU-stack,"",%progbits

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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.