Fix the implementations of PSEUDO_NOERROR and PSEUDO.

The PSEUDO* macros should not declare <syscall>, only _<syscall> and
__sys_<syscall>.  This was causing the interposing C wrappers to be
ignored due to link order.

Reviewed by:	kib
Obtained from:	CheriBSD (4e8e13c90f)
MFC after:	1 week
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D4097
This commit is contained in:
Brooks Davis 2016-01-21 17:29:01 +00:00
parent df56caeeb1
commit 1e3a2e82aa
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=294515

View File

@ -100,19 +100,6 @@
* Do a syscall that cannot fail (sync, get{p,u,g,eu,eg)id)
*/
#define RSYSCALL_NOERROR(x) \
PSEUDO_NOERROR(x)
/*
* Do a normal syscall.
*/
#define RSYSCALL(x) \
PSEUDO(x)
/*
* Do a renamed or pseudo syscall (e.g., _exit()), where the entrypoint
* and syscall name are not the same.
*/
#define PSEUDO_NOERROR(x) \
LEAF(__sys_ ## x); \
.weak _C_LABEL(x); \
_C_LABEL(x) = _C_LABEL(__CONCAT(__sys_,x)); \
@ -120,9 +107,12 @@ LEAF(__sys_ ## x); \
_C_LABEL(__CONCAT(_,x)) = _C_LABEL(__CONCAT(__sys_,x)); \
SYSTRAP(x); \
j ra; \
END(__sys_ ## x)
END(__sys_ ## x)
#define PSEUDO(x) \
/*
* Do a normal syscall.
*/
#define RSYSCALL(x) \
LEAF(__sys_ ## x); \
.weak _C_LABEL(x); \
_C_LABEL(x) = _C_LABEL(__CONCAT(__sys_,x)); \
@ -135,3 +125,27 @@ LEAF(__sys_ ## x); \
err: \
PIC_TAILCALL(__cerror); \
END(__sys_ ## x)
/*
* Do a renamed or pseudo syscall (e.g., _exit()), where the entrypoint
* and syscall name are not the same.
*/
#define PSEUDO_NOERROR(x) \
LEAF(__sys_ ## x); \
.weak _C_LABEL(__CONCAT(_,x)); \
_C_LABEL(__CONCAT(_,x)) = _C_LABEL(__CONCAT(__sys_,x)); \
SYSTRAP(x); \
j ra; \
END(__sys_ ## x)
#define PSEUDO(x) \
LEAF(__sys_ ## x); \
.weak _C_LABEL(__CONCAT(_,x)); \
_C_LABEL(__CONCAT(_,x)) = _C_LABEL(__CONCAT(__sys_,x)); \
PIC_PROLOGUE(__sys_ ## x); \
SYSTRAP(x); \
bne a3,zero,err; \
PIC_RETURN(); \
err: \
PIC_TAILCALL(__cerror); \
END(__sys_ ## x)