-/* $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 <machine/asm.h>
+
+#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
-/* $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
*/
#include <sys/syscall.h>
-#include <machine/asm.h>
+#include "DEFS.h"
#undef _LOCORE
#define _LOCORE
#include <machine/frame.h>
/* 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) !\
#define RSYSCALL(x) PSEUDO(x,x)
#define RSYSCALL_HIDDEN(x) PSEUDO_HIDDEN(x,x)
-