1*5bcead81Skettenis /* $OpenBSD: DEFS.h,v 1.5 2023/12/11 22:24:15 kettenis Exp $ */ 2ea6088e7Sguenther /* 3ea6088e7Sguenther * Copyright (c) 2017 Philip Guenther <guenther@openbsd.org> 4ea6088e7Sguenther * 5ea6088e7Sguenther * Permission to use, copy, modify, and distribute this software for any 6ea6088e7Sguenther * purpose with or without fee is hereby granted, provided that the above 7ea6088e7Sguenther * copyright notice and this permission notice appear in all copies. 8ea6088e7Sguenther * 9ea6088e7Sguenther * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10ea6088e7Sguenther * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11ea6088e7Sguenther * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12ea6088e7Sguenther * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13ea6088e7Sguenther * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14ea6088e7Sguenther * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15ea6088e7Sguenther * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16ea6088e7Sguenther */ 17df930be7Sderaadt 18df930be7Sderaadt #include <machine/asm.h> 19ea6088e7Sguenther 20ea6088e7Sguenther /* 21ea6088e7Sguenther * We define a hidden alias with the prefix "_libc_" for each global symbol 22ea6088e7Sguenther * that may be used internally. By referencing _libc_x instead of x, other 23ea6088e7Sguenther * parts of libc prevent overriding by the application and avoid unnecessary 24ea6088e7Sguenther * relocations. 25ea6088e7Sguenther */ 26ea6088e7Sguenther #define _HIDDEN(x) _libc_##x 27ea6088e7Sguenther #define _HIDDEN_ALIAS(x,y) \ 28ea6088e7Sguenther STRONG_ALIAS(_HIDDEN(x),y); \ 29ea6088e7Sguenther .hidden _HIDDEN(x) 30ea6088e7Sguenther #define _HIDDEN_FALIAS(x,y) \ 31ea6088e7Sguenther _HIDDEN_ALIAS(x,y); \ 32ea6088e7Sguenther .type _HIDDEN(x),@function 33ea6088e7Sguenther 34ea6088e7Sguenther /* 35ea6088e7Sguenther * For functions implemented in ASM that aren't syscalls. 36ea6088e7Sguenther * END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names 37ea6088e7Sguenther * END_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names 38ea6088e7Sguenther * END_BUILTIN(x) If compiling with clang, then just END() and 39ea6088e7Sguenther * mark it .protected, else be like END_STRONG(); 40ea6088e7Sguenther * for clang builtins like memcpy 41ea6088e7Sguenther */ 42ea6088e7Sguenther #define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x)) 43ea6088e7Sguenther #define END_WEAK(x) END_STRONG(x); .weak x 44ea6088e7Sguenther 45ea6088e7Sguenther #ifdef __clang__ 46ea6088e7Sguenther #define END_BUILTIN(x) END(x); .protected x 47ea6088e7Sguenther #else 48ea6088e7Sguenther #define END_BUILTIN(x) END_STRONG(x) 49ea6088e7Sguenther #endif 5083762a71Sderaadt 5183762a71Sderaadt #define PINSYSCALL(sysno, label) \ 5283762a71Sderaadt .pushsection .openbsd.syscalls,"",@progbits; \ 53*5bcead81Skettenis .p2align 2; \ 5483762a71Sderaadt .long label; \ 5583762a71Sderaadt .long sysno; \ 5683762a71Sderaadt .popsection; 57