From b247cc180091d8af1ee36708f2f8076965851bb9 Mon Sep 17 00:00:00 2001 From: miod Date: Wed, 13 Dec 2023 09:01:25 +0000 Subject: [PATCH] Move a large part of SYS.h defines to DEFS.h to match where other platforms put their macros, and also turn a few "EXIT" into "END" for consistency with other platforms. NFCI ok kettenis@ deraadt@ --- lib/libc/arch/hppa/DEFS.h | 84 ++++++++++++++++++++++++++++- lib/libc/arch/hppa/SYS.h | 50 ++++------------- lib/libc/arch/hppa/string/memmove.S | 4 +- 3 files changed, 96 insertions(+), 42 deletions(-) diff --git a/lib/libc/arch/hppa/DEFS.h b/lib/libc/arch/hppa/DEFS.h index 31c1d99824c..91d13820937 100644 --- a/lib/libc/arch/hppa/DEFS.h +++ b/lib/libc/arch/hppa/DEFS.h @@ -1,3 +1,85 @@ -/* $OpenBSD: DEFS.h,v 1.1 1998/08/28 20:59:40 mickey Exp $ */ +/* $OpenBSD: DEFS.h,v 1.2 2023/12/13 09:01:25 miod Exp $ */ + +/* + * Copyright (c) 1998-2002 Michael Shalayeff + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF MIND + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #include + +#define END(x) EXIT(x) + +/* + * We define a hidden alias with the prefix "_libc_" for each global symbol + * that may be used internally. By referencing _libc_x instead of x, other + * parts of libc prevent overriding by the application and avoid unnecessary + * relocations. + */ +#define _HIDDEN(x) _libc_##x +#define _HIDDEN_ALIAS(x,y) \ + STRONG_ALIAS(_HIDDEN(x),y) !\ + .hidden _HIDDEN(x) +#define _HIDDEN_FALIAS(x,y) \ + _HIDDEN_ALIAS(x,y) !\ + .type _HIDDEN(x),@function + +/* + * For functions implemented in ASM that aren't syscalls. + * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names + * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names + * ALTEND_STRONG(x) and ALTEND_WEAK() + * Matching macros for ALTENTRY functions + * END_BUILTIN(x) If compiling with clang, then just END() and + * mark it .protected, else be like END_STRONG(); + * for clang builtins like memcpy + * + * If a 'BUILTIN' function needs be referenced by other ASM code, then use + * _BUILTIN(x) If compiled with clang, then just x, otherwise + * _HIDDEN(x) + * + * _END(x) Set a size on a symbol, like END(), but even for + * symbols with no matching ENTRY(). (On alpha and + * mips64, END() generates .end which requires a + * matching .ent from ENTRY()) + */ +#define END_STRONG(x) END(x) ! _HIDDEN_FALIAS(x,x) ! _END(_HIDDEN(x)) +#define END_WEAK(x) END_STRONG(x) ! .weak x +#define ALTEND_STRONG(x) _HIDDEN_FALIAS(x,x) ! _END(_HIDDEN(x)) +#define ALTEND_WEAK(x) ALTEND_STRONG(x) ! .weak x + +#ifdef __clang__ +#define END_BUILTIN(x) END(x) ! .protected x +#define _BUILTIN(x) x +#else +#define END_BUILTIN(x) END_STRONG(x) +#define _BUILTIN(x) _HIDDEN(x) +#endif + +#define _END(x) .size x, . - x + +#define PINSYSCALL(sysno, label) \ + .pushsection .openbsd.syscalls,"",@progbits !\ + .p2align 2 !\ + .long label !\ + .long sysno !\ + .popsection diff --git a/lib/libc/arch/hppa/SYS.h b/lib/libc/arch/hppa/SYS.h index 2e78cff6316..299f11aefd9 100644 --- a/lib/libc/arch/hppa/SYS.h +++ b/lib/libc/arch/hppa/SYS.h @@ -1,4 +1,4 @@ -/* $OpenBSD: SYS.h,v 1.26 2023/12/11 22:24:15 kettenis Exp $ */ +/* $OpenBSD: SYS.h,v 1.27 2023/12/13 09:01:25 miod Exp $ */ /* * Copyright (c) 1998-2002 Michael Shalayeff @@ -26,7 +26,7 @@ */ #include -#include +#include "DEFS.h" #undef _LOCORE #define _LOCORE #include @@ -36,56 +36,29 @@ /* offsetof(struct tib, tib_errno) - offsetof(struct tib, __tib_tcb) */ #define TCB_OFFSET_ERRNO -8 -/* - * We define a hidden alias with the prefix "_libc_" for each global symbol - * that may be used internally. By referencing _libc_x instead of x, other - * parts of libc prevent overriding by the application and avoid unnecessary - * relocations. - */ -#define _HIDDEN(x) _libc_##x -#define _HIDDEN_ALIAS(x,y) \ - STRONG_ALIAS(_HIDDEN(x),y) !\ - .hidden _HIDDEN(x) -#define _HIDDEN_FALIAS(x,y) \ - _HIDDEN_ALIAS(x,y) !\ - .type _HIDDEN(x),@function - /* * For functions implemented in ASM that aren't syscalls. * EXIT_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names * EXIT_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names - * ALTEXIT_STRONG(x) and ALTEXIT_WEAK() - * Matching macros for ALTENTRY functions */ -#define ALTEXIT_STRONG(x) \ - _HIDDEN_FALIAS(x,x) !\ - .size _HIDDEN(x), . - _HIDDEN(x) -#define ALTEXIT_WEAK(x) ALTEXIT_STRONG(x) !\ - .weak x -#define EXIT_STRONG(x) EXIT(x) !\ - ALTEXIT_STRONG(x) -#define EXIT_WEAK(x) EXIT_STRONG(x) !\ - .weak x +#define EXIT_STRONG(x) EXIT(x) !\ + _HIDDEN_FALIAS(x,x) !\ + _END(_HIDDEN(x)) +#define EXIT_WEAK(x) EXIT_STRONG(x) !\ + .weak x -#define PINSYSCALL(sysno, label) \ - .pushsection .openbsd.syscalls,"",@progbits !\ - .p2align 2 !\ - .long label !\ - .long sysno !\ - .popsection - #define SYSENTRY(x) !\ -LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\ + LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\ WEAK_ALIAS(x,__CONCAT(_thread_sys_,x)) #define SYSENTRY_HIDDEN(x) !\ -LEAF_ENTRY(__CONCAT(_thread_sys_,x)) + LEAF_ENTRY(__CONCAT(_thread_sys_,x)) #define SYSEXIT(x) !\ SYSEXIT_HIDDEN(x) !\ - .size x, . - x + _END(x) #define SYSEXIT_HIDDEN(x) !\ EXIT(__CONCAT(_thread_sys_,x)) !\ _HIDDEN_FALIAS(x,_thread_sys_##x) !\ - .size _HIDDEN(x), . - _HIDDEN(x) + _END(_HIDDEN(x)) #define SYSCALL(x) !\ stw rp, HPPA_FRAME_ERP(sr0,sp) !\ @@ -130,4 +103,3 @@ SYSEXIT(x) #define RSYSCALL(x) PSEUDO(x,x) #define RSYSCALL_HIDDEN(x) PSEUDO_HIDDEN(x,x) - diff --git a/lib/libc/arch/hppa/string/memmove.S b/lib/libc/arch/hppa/string/memmove.S index 2bbe3045b6d..5d86e2537fd 100644 --- a/lib/libc/arch/hppa/string/memmove.S +++ b/lib/libc/arch/hppa/string/memmove.S @@ -151,7 +151,7 @@ $bcopy_r.done bv 0(rp) nop -EXIT_WEAK(bcopy) -ALTEXIT_STRONG(memmove) +END_WEAK(bcopy) +ALTEND_STRONG(memmove) .end -- 2.20.1