summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDale Rahn <drahn@cvs.openbsd.org>2020-06-25 01:59:28 +0000
committerDale Rahn <drahn@cvs.openbsd.org>2020-06-25 01:59:28 +0000
commite54a3d86f16ddde6d2d4d35438f36c96f1876a93 (patch)
tree59b17647357e2e132624f5f2a1ef44051cd1a675 /lib
parent22cd93dca7d0e05f5969d33a6b1178b65fae9043 (diff)
PowerPC64 libc (libc powerpc top)
Expects ELFv2 TOC loading in ENTRY(), build with -gdwarf-4 Split SYS.h into SYS.h and DEFS.h fix tabs after #define
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/arch/powerpc64/DEFS.h69
-rw-r--r--lib/libc/arch/powerpc64/Makefile.inc2
-rw-r--r--lib/libc/arch/powerpc64/SYS.h99
-rw-r--r--lib/libc/arch/powerpc64/Symbols.list6
4 files changed, 176 insertions, 0 deletions
diff --git a/lib/libc/arch/powerpc64/DEFS.h b/lib/libc/arch/powerpc64/DEFS.h
new file mode 100644
index 00000000000..f6f20da0936
--- /dev/null
+++ b/lib/libc/arch/powerpc64/DEFS.h
@@ -0,0 +1,69 @@
+/* $OpenBSD: DEFS.h,v 1.1 2020/06/25 01:59:27 drahn Exp $ */
+
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * William Jolitz.
+ *
+ * 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.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 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.
+ *
+ * from: @(#)SYS.h 5.5 (Berkeley) 5/7/91
+ * $NetBSD: SYS.h,v 1.5 2002/06/03 18:30:32 fvdl Exp $
+ */
+
+#include <machine/asm.h>
+
+/*
+ * 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
+ * END_BUILTIN(x) If compiling with clang, then just END() and
+ * mark it .protected, else be like END_STRONG();
+ * for clang builtins like memcpy
+ */
+#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
+#define END_WEAK(x) END_STRONG(x); .weak x
+
+#ifdef __clang__
+#define END_BUILTIN(x) END(x); .protected x
+#else
+#define END_BUILTIN(x) END_STRONG(x)
+#endif
diff --git a/lib/libc/arch/powerpc64/Makefile.inc b/lib/libc/arch/powerpc64/Makefile.inc
new file mode 100644
index 00000000000..ac01256ac85
--- /dev/null
+++ b/lib/libc/arch/powerpc64/Makefile.inc
@@ -0,0 +1,2 @@
+# $OpenBSD: Makefile.inc,v 1.1 2020/06/25 01:59:27 drahn Exp $
+DEBUG?= -gdwarf-4
diff --git a/lib/libc/arch/powerpc64/SYS.h b/lib/libc/arch/powerpc64/SYS.h
new file mode 100644
index 00000000000..1d354cbc2ae
--- /dev/null
+++ b/lib/libc/arch/powerpc64/SYS.h
@@ -0,0 +1,99 @@
+/* $OpenBSD: SYS.h,v 1.1 2020/06/25 01:59:27 drahn Exp $ */
+/*-
+ * Copyright (c) 1994
+ * Andrew Cagney. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Ralph Campbell.
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 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.
+ *
+ * from: @(#)SYS.h 8.1 (Berkeley) 6/4/93
+ */
+
+#include "DEFS.h"
+#include <sys/syscall.h>
+
+/* r0 will be a non zero errno if there was an error, while r3/r4 will
+ contain the return value */
+
+#include "machine/asm.h"
+
+
+/* offsetof(struct tib, tib_errno) - offsetof(struct tib, __tib_tcb) */
+#define TCB_OFFSET_ERRNO (-8)
+/* from <powerpc/tcb.h>: TCB address == %r2 - TCB_OFFSET */
+#define TCB_OFFSET 0x7000
+
+/* offset of errno from %r2 */
+#define R13_OFFSET_ERRNO (-TCB_OFFSET + TCB_OFFSET_ERRNO)
+
+#define _CONCAT(x,y) x##y
+#define PSEUDO_PREFIX(p,x,y) \
+ ENTRY(p##x) \
+ li %r0, SYS_##y ; \
+ /* sc */
+#define PSEUDO_SUFFIX cmpwi %r0, 0 ; \
+ beqlr ; \
+ stw %r0, R13_OFFSET_ERRNO(%r13); \
+ li %r3, -1; \
+ blr
+
+#define PSEUDO_NOERROR_SUFFIX blr
+
+#define __END_HIDDEN(p,x) END(p##x); \
+ _HIDDEN_FALIAS(x,p##x); \
+ END(_HIDDEN(x))
+#define __END(p,x) __END_HIDDEN(p,x); END(x)
+
+
+#define ALIAS(x,y) WEAK_ALIAS(y,_CONCAT(x,y));
+
+#define PREFIX_HIDDEN(x) PSEUDO_PREFIX(_thread_sys_,x,x)
+#define PREFIX(x) ALIAS(_thread_sys_,x) \
+ PREFIX_HIDDEN(x)
+#define PSEUDO_NOERROR(x,y) ALIAS(_thread_sys_,x) \
+ PSEUDO_PREFIX(_thread_sys_,x,y) ; \
+ sc ; \
+ PSEUDO_NOERROR_SUFFIX; \
+ __END(_thread_sys_,x)
+
+#define PSEUDO_HIDDEN(x,y) PSEUDO_PREFIX(_thread_sys_,x,y) ; \
+ sc ; \
+ PSEUDO_SUFFIX; \
+ __END_HIDDEN(_thread_sys_,x)
+#define PSEUDO(x,y) ALIAS(_thread_sys_,x) \
+ PSEUDO_HIDDEN(x,y); \
+ END(x)
+
+#define RSYSCALL(x) PSEUDO(x,x)
+#define RSYSCALL_HIDDEN(x) PSEUDO_HIDDEN(x,x)
+#define SYSCALL_END_HIDDEN(x) __END_HIDDEN(_thread_sys_,x)
+#define SYSCALL_END(x) __END(_thread_sys_,x)
+
diff --git a/lib/libc/arch/powerpc64/Symbols.list b/lib/libc/arch/powerpc64/Symbols.list
new file mode 100644
index 00000000000..036a5a9f7e1
--- /dev/null
+++ b/lib/libc/arch/powerpc64/Symbols.list
@@ -0,0 +1,6 @@
+__end
+_mcount
+fabsl
+frexpl
+ldexpl
+modfl