From 1c342ca7c38d396bc38235af25058543c86c5bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 13 May 2025 01:32:35 +0200 Subject: [PATCH] libc: Add NetBSD libc startup code from 10.1. * sysident_assym.h was manually expanded. * The ELF_NOTE_MARCH_DESC and ELF_NOTE_MARCH_DESCSZ macros will be defined by the compiler. * Legacy .init/.fini stuff was removed. * GCJ nonsense was removed. --- lib/libc/netbsd/lib/csu/arch/aarch64/crt0.S | 45 +++ lib/libc/netbsd/lib/csu/arch/earm/crt0.S | 61 +++ lib/libc/netbsd/lib/csu/arch/i386/crt0.S | 48 +++ lib/libc/netbsd/lib/csu/arch/m68k/crt0.S | 47 +++ lib/libc/netbsd/lib/csu/arch/mips/crt0.S | 59 +++ lib/libc/netbsd/lib/csu/arch/powerpc/crt0.S | 56 +++ lib/libc/netbsd/lib/csu/arch/sparc/crt0.S | 55 +++ lib/libc/netbsd/lib/csu/arch/sparc64/crt0.S | 59 +++ lib/libc/netbsd/lib/csu/arch/x86_64/crt0.S | 48 +++ lib/libc/netbsd/lib/csu/common/crt0-common.c | 351 ++++++++++++++++++ lib/libc/netbsd/lib/csu/common/crtbegin.c | 135 +++++++ lib/libc/netbsd/lib/csu/common/csu-common.h | 38 ++ lib/libc/netbsd/lib/csu/common/sysident.S | 89 +++++ .../netbsd/lib/csu/common/sysident_assym.h | 17 + 14 files changed, 1108 insertions(+) create mode 100644 lib/libc/netbsd/lib/csu/arch/aarch64/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/earm/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/i386/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/m68k/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/mips/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/powerpc/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/sparc/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/sparc64/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/arch/x86_64/crt0.S create mode 100644 lib/libc/netbsd/lib/csu/common/crt0-common.c create mode 100644 lib/libc/netbsd/lib/csu/common/crtbegin.c create mode 100644 lib/libc/netbsd/lib/csu/common/csu-common.h create mode 100644 lib/libc/netbsd/lib/csu/common/sysident.S create mode 100644 lib/libc/netbsd/lib/csu/common/sysident_assym.h diff --git a/lib/libc/netbsd/lib/csu/arch/aarch64/crt0.S b/lib/libc/netbsd/lib/csu/arch/aarch64/crt0.S new file mode 100644 index 0000000000..b1972af55d --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/aarch64/crt0.S @@ -0,0 +1,45 @@ +/* $NetBSD: crt0.S,v 1.2 2018/11/26 17:37:44 joerg Exp $ */ + +/*- + * Copyright (c) 2014 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include + +RCSID("$NetBSD: crt0.S,v 1.2 2018/11/26 17:37:44 joerg Exp $") + +STRONG_ALIAS(_start,__start) + +_ENTRY(__start) + /* + * void ___start(void (*cleanup)(void), + * struct ps_strings *ps_strings); + */ + mov x1, x2 + b ___start +END(__start) diff --git a/lib/libc/netbsd/lib/csu/arch/earm/crt0.S b/lib/libc/netbsd/lib/csu/arch/earm/crt0.S new file mode 100644 index 0000000000..d566265f3d --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/earm/crt0.S @@ -0,0 +1,61 @@ +/* $NetBSD: crt0.S,v 1.4 2018/11/26 17:37:44 joerg Exp $ */ + +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include + +RCSID("$NetBSD: crt0.S,v 1.4 2018/11/26 17:37:44 joerg Exp $") + +STRONG_ALIAS(_start,__start) + +_ENTRY(__start) + /* + * ps_strings is passed in r0 and cleanup in r2. + * It should be ps_string in r1 and cleanup in r0. + */ + mov r1, r0 + mov r0, r2 + + /* Ensure the stack is properly aligned before calling C code. */ +#if !defined(__thumb__) + bic sp, sp, #7 +#else + movs r6, #7 + mov r7, sp + bics r7, r7, r6 + mov sp, r7 +#endif + + /* + * void ___start(void (*cleanup)(void), + * struct ps_strings *ps_strings); + */ + + b ___start diff --git a/lib/libc/netbsd/lib/csu/arch/i386/crt0.S b/lib/libc/netbsd/lib/csu/arch/i386/crt0.S new file mode 100644 index 0000000000..89952424dc --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/i386/crt0.S @@ -0,0 +1,48 @@ +/* $NetBSD: crt0.S,v 1.4 2018/11/26 17:37:45 joerg Exp $ */ + +/* + * Copyright (c) 1998 Christos Zoulas + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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 + +RCSID("$NetBSD: crt0.S,v 1.4 2018/11/26 17:37:45 joerg Exp $") + + .hidden ___start + +STRONG_ALIAS(_start,__start) +_ENTRY(__start) + pushl %ebx + pushl %edx + call ___start diff --git a/lib/libc/netbsd/lib/csu/arch/m68k/crt0.S b/lib/libc/netbsd/lib/csu/arch/m68k/crt0.S new file mode 100644 index 0000000000..293820c18f --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/m68k/crt0.S @@ -0,0 +1,47 @@ +#include + +/* + * Copyright (c) 1999 Klaus Klein + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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. + * + * <> + */ + +RCSID("$NetBSD: crt0.S,v 1.5 2018/11/26 17:37:45 joerg Exp $") + +STRONG_ALIAS(_start,__start) + +_ENTRY(__start) + movl %a2,-(%sp) | ps_strings + movl %a1,-(%sp) | cleanup + | call: ___start(cleanup, ps_strings) + jbsr ___start +END(__start) diff --git a/lib/libc/netbsd/lib/csu/arch/mips/crt0.S b/lib/libc/netbsd/lib/csu/arch/mips/crt0.S new file mode 100644 index 0000000000..385001c89b --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/mips/crt0.S @@ -0,0 +1,59 @@ +/* $NetBSD: crt0.S,v 1.4 2018/11/26 17:37:45 joerg Exp $ */ + +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include + +RCSID("$NetBSD: crt0.S,v 1.4 2018/11/26 17:37:45 joerg Exp $") + +STRONG_ALIAS(_start,__start) + +/* + * Assumes kernel (or ld_elf.so) passes the following parameters to + * user-space in registers: + * + * a0 stack pointer (0 if setregs didn't fill this in) + * a1 cleanup + * a2 Obj_Entry + * a3 ps_strings + * + * XXX Does this violate the ABI? + * as well as the usual registers (pc, sp, and t9 == pc for ABI). + */ + +NESTED_NOPROFILE(__start, CALLFRAME_SIZ, ra) + SETUP_GP + SETUP_GP64(t3, __start) + move a0, a1 /* cleanup */ + PTR_L t9,%call16(_C_LABEL(___start))(gp) + move a1, a3 /* ps_strings */ + .reloc 1f,R_MIPS_JALR,___start +1: jr t9 +END(__start) diff --git a/lib/libc/netbsd/lib/csu/arch/powerpc/crt0.S b/lib/libc/netbsd/lib/csu/arch/powerpc/crt0.S new file mode 100644 index 0000000000..fe767c784e --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/powerpc/crt0.S @@ -0,0 +1,56 @@ +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include + +RCSID("$NetBSD: crt0.S,v 1.7 2018/11/26 17:37:45 joerg Exp $") + +STRONG_ALIAS(_start,__start) + + .hidden ___start + +#ifndef _LP64 + .weak _SDA_BASE_ +#endif + +ENTRY_NOPROFILE(__start) +#ifndef _LP64 + bcl 20,31,1f +1: + mflr %r11 + /* SVR4 ABI says small data is in r13 */ + addis %r13,%r11,_SDA_BASE_-1b@ha + addi %r13,%r13,_SDA_BASE_-1b@l +#endif + + mr %r3,%r7 /* cleanup */ + mr %r4,%r8 /* ps_strings */ + + CALL(___start) +END(__start) diff --git a/lib/libc/netbsd/lib/csu/arch/sparc/crt0.S b/lib/libc/netbsd/lib/csu/arch/sparc/crt0.S new file mode 100644 index 0000000000..fde588e6cf --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/sparc/crt0.S @@ -0,0 +1,55 @@ +/* $NetBSD: crt0.S,v 1.3 2018/11/26 17:37:45 joerg Exp $ */ + +/* + * Copyright (c) 1998 Christos Zoulas + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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 + +RCSID("$NetBSD: crt0.S,v 1.3 2018/11/26 17:37:45 joerg Exp $") + +STRONG_ALIAS(_start,__start) + + ! called with: + ! %g3 = cleanup + ! %g1 = ps_strings + ! call: ___start(cleanup, ps_strings) +_ENTRY(__start) + mov 0, %fp + andn %sp, 7, %sp ! align stack + sub %sp, 24, %sp ! expand to standard stack frame size + mov %g3, %o0 + call ___start + mov %g1, %o1 + diff --git a/lib/libc/netbsd/lib/csu/arch/sparc64/crt0.S b/lib/libc/netbsd/lib/csu/arch/sparc64/crt0.S new file mode 100644 index 0000000000..f8301093fd --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/sparc64/crt0.S @@ -0,0 +1,59 @@ +/* $NetBSD: crt0.S,v 1.2 2018/11/26 17:37:46 joerg Exp $ */ + +/* + * Copyright (c) 1998 Christos Zoulas + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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 + +RCSID("$NetBSD: crt0.S,v 1.2 2018/11/26 17:37:46 joerg Exp $") + +STRONG_ALIAS(_start,__start) + + .align 4 + .register %g3,#scratch + .register %g2,#scratch + + ! called with: + ! %g3 = cleanup + ! %g2 = obj + ! %g1 = ps_strings + ! call: ___start(cleanup, ps_strings) +_ENTRY(__start) + clr %fp + clr %g4 ! data base for some memory models + mov %g3, %o0 + ba,pt %icc,___start + mov %g1, %o1 + diff --git a/lib/libc/netbsd/lib/csu/arch/x86_64/crt0.S b/lib/libc/netbsd/lib/csu/arch/x86_64/crt0.S new file mode 100644 index 0000000000..0f235975c0 --- /dev/null +++ b/lib/libc/netbsd/lib/csu/arch/x86_64/crt0.S @@ -0,0 +1,48 @@ +/* $NetBSD: crt0.S,v 1.4 2018/11/26 17:37:46 joerg Exp $ */ + +/* + * Copyright (c) 1998 Christos Zoulas + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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 + +RCSID("$NetBSD: crt0.S,v 1.4 2018/11/26 17:37:46 joerg Exp $") + +STRONG_ALIAS(_start,__start) + .hidden ___start + +_ENTRY(__start) + andq $~15,%rsp + subq $8,%rsp + movq %rdx, %rdi + movq %rbx, %rsi + jmp ___start diff --git a/lib/libc/netbsd/lib/csu/common/crt0-common.c b/lib/libc/netbsd/lib/csu/common/crt0-common.c new file mode 100644 index 0000000000..ceabcc96a4 --- /dev/null +++ b/lib/libc/netbsd/lib/csu/common/crt0-common.c @@ -0,0 +1,351 @@ +/* $NetBSD: crt0-common.c,v 1.27 2022/06/21 06:52:17 skrll Exp $ */ + +/* + * Copyright (c) 1998 Christos Zoulas + * Copyright (c) 1995 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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 +__RCSID("$NetBSD: crt0-common.c,v 1.27 2022/06/21 06:52:17 skrll Exp $"); + +#include +#include +#include +#include +#include +#include +#include + +#include "csu-common.h" + +extern int main(int, char **, char **); + +typedef void (*fptr_t)(void); +#ifndef HAVE_INITFINI_ARRAY +extern void _init(void); +extern void _fini(void); +#endif +extern void _libc_init(void); + +/* + * Arrange for _DYNAMIC to be weak and undefined (and therefore to show up + * as being at address zero, unless something else defines it). That way, + * if we happen to be compiling without -static but with without any + * shared libs present, things will still work. + */ + +__weakref_visible int rtld_DYNAMIC __weak_reference(_DYNAMIC); + +#ifdef MCRT0 +extern void monstartup(u_long, u_long); +extern void _mcleanup(void); +extern unsigned char __etext, __eprol; +#endif /* MCRT0 */ + +static char empty_string[] = ""; + +char **environ __common; +struct ps_strings *__ps_strings __common = 0; +char *__progname __common = empty_string; + +__dead __dso_hidden void ___start(void (*)(void), struct ps_strings *); + +#define write(fd, s, n) __syscall(SYS_write, (fd), (s), (n)) + +#define _FATAL(str) \ +do { \ + write(2, str, sizeof(str)-1); \ + _exit(1); \ +} while (0) + +/* + * If we are using INIT_ARRAY/FINI_ARRAY and we are linked statically, + * we have to process these instead of relying on RTLD to do it for us. + * + * Since we don't need .init or .fini sections, just code them in C + * to make life easier. + */ +extern const fptr_t __preinit_array_start[] __dso_hidden; +extern const fptr_t __preinit_array_end[] __dso_hidden __weak; +extern const fptr_t __init_array_start[] __dso_hidden; +extern const fptr_t __init_array_end[] __dso_hidden __weak; +extern const fptr_t __fini_array_start[] __dso_hidden; +extern const fptr_t __fini_array_end[] __dso_hidden __weak; + +static inline void +_preinit(void) +{ + for (const fptr_t *f = __preinit_array_start; f < __preinit_array_end; f++) { + (*f)(); + } +} + +static inline void +_initarray(void) +{ + for (const fptr_t *f = __init_array_start; f < __init_array_end; f++) { + (*f)(); + } +} + +static void +_finiarray(void) +{ + for (const fptr_t *f = __fini_array_start; f < __fini_array_end; f++) { + (*f)(); + } +} + +#if \ + defined(__aarch64__) || \ + defined(__powerpc__) || \ + defined(__sparc__) || \ + defined(__x86_64__) +#define HAS_IPLTA +static void fix_iplta(void) __noinline; +#elif \ + defined(__arm__) || \ + defined(__i386__) +#define HAS_IPLT +static void fix_iplt(void) __noinline; +#endif + + +#ifdef HAS_IPLTA +#include +extern const Elf_Rela __rela_iplt_start[] __dso_hidden __weak; +extern const Elf_Rela __rela_iplt_end[] __dso_hidden __weak; +#ifdef __sparc__ +#define IFUNC_RELOCATION R_TYPE(JMP_IREL) +#include +#define write_plt(where, value) sparc_write_branch((void *)where, (void *)value) +#else +#define IFUNC_RELOCATION R_TYPE(IRELATIVE) +#define write_plt(where, value) *where = value +#endif + +static void +fix_iplta(void) +{ + const Elf_Rela *rela, *relalim; + uintptr_t relocbase = 0; + Elf_Addr *where, target; + + rela = __rela_iplt_start; + relalim = __rela_iplt_end; + for (; rela < relalim; ++rela) { + if (ELF_R_TYPE(rela->r_info) != IFUNC_RELOCATION) + abort(); + where = (Elf_Addr *)(relocbase + rela->r_offset); + target = (Elf_Addr)(relocbase + rela->r_addend); + target = ((Elf_Addr(*)(void))target)(); + write_plt(where, target); + } +} +#endif +#ifdef HAS_IPLT +extern const Elf_Rel __rel_iplt_start[] __dso_hidden __weak; +extern const Elf_Rel __rel_iplt_end[] __dso_hidden __weak; +#define IFUNC_RELOCATION R_TYPE(IRELATIVE) + +static void +fix_iplt(void) +{ + const Elf_Rel *rel, *rellim; + uintptr_t relocbase = 0; + Elf_Addr *where, target; + + rel = __rel_iplt_start; + rellim = __rel_iplt_end; + for (; rel < rellim; ++rel) { + if (ELF_R_TYPE(rel->r_info) != IFUNC_RELOCATION) + abort(); + where = (Elf_Addr *)(relocbase + rel->r_offset); + target = ((Elf_Addr(*)(void))*where)(); + *where = target; + } +} +#endif + +#if defined(__x86_64__) || defined(__i386__) +# define HAS_RELOCATE_SELF +# if defined(__x86_64__) +# define RELA +# define REL_TAG DT_RELA +# define RELSZ_TAG DT_RELASZ +# define REL_TYPE Elf_Rela +# else +# define REL_TAG DT_REL +# define RELSZ_TAG DT_RELSZ +# define REL_TYPE Elf_Rel +# endif + +#include + +static void relocate_self(struct ps_strings *) __noinline; + +static void +relocate_self(struct ps_strings *ps_strings) +{ + AuxInfo *aux = (AuxInfo *)(ps_strings->ps_argvstr + ps_strings->ps_nargvstr + + ps_strings->ps_nenvstr + 2); + uintptr_t relocbase = (uintptr_t)~0U; + const Elf_Phdr *phdr = NULL; + Elf_Half phnum = (Elf_Half)~0; + + for (; aux->a_type != AT_NULL; ++aux) { + switch (aux->a_type) { + case AT_BASE: + if (aux->a_v) + return; + break; + case AT_PHDR: + phdr = (void *)aux->a_v; + break; + case AT_PHNUM: + phnum = (Elf_Half)aux->a_v; + break; + } + } + + if (phdr == NULL || phnum == (Elf_Half)~0) + return; + + const Elf_Phdr *phlimit = phdr + phnum, *dynphdr = NULL; + + for (; phdr < phlimit; ++phdr) { + if (phdr->p_type == PT_DYNAMIC) + dynphdr = phdr; + if (phdr->p_type == PT_PHDR) + relocbase = (uintptr_t)phdr - phdr->p_vaddr; + } + if (dynphdr == NULL || relocbase == (uintptr_t)~0U) + return; + + Elf_Dyn *dynp = (Elf_Dyn *)((uint8_t *)dynphdr->p_vaddr + relocbase); + + const REL_TYPE *relocs = 0, *relocslim; + Elf_Addr relocssz = 0; + + for (; dynp->d_tag != DT_NULL; dynp++) { + switch (dynp->d_tag) { + case REL_TAG: + relocs = + (const REL_TYPE *)(relocbase + dynp->d_un.d_ptr); + break; + case RELSZ_TAG: + relocssz = dynp->d_un.d_val; + break; + } + } + relocslim = (const REL_TYPE *)((const uint8_t *)relocs + relocssz); + for (; relocs < relocslim; ++relocs) { + Elf_Addr *where; + + where = (Elf_Addr *)(relocbase + relocs->r_offset); + + switch (ELF_R_TYPE(relocs->r_info)) { + case R_TYPE(RELATIVE): /* word64 B + A */ +#ifdef RELA + *where = (Elf_Addr)(relocbase + relocs->r_addend); +#else + *where += (Elf_Addr)relocbase; +#endif + break; +#ifdef IFUNC_RELOCATION + case IFUNC_RELOCATION: + break; +#endif + default: + abort(); + } + } +} +#endif + +void +___start(void (*cleanup)(void), /* from shared loader */ + struct ps_strings *ps_strings) +{ +#if defined(HAS_RELOCATE_SELF) + relocate_self(ps_strings); +#endif + + if (ps_strings == NULL) + _FATAL("ps_strings missing\n"); + __ps_strings = ps_strings; + + environ = ps_strings->ps_envstr; + + if (ps_strings->ps_argvstr[0] != NULL) { + char *c; + __progname = ps_strings->ps_argvstr[0]; + for (c = ps_strings->ps_argvstr[0]; *c; ++c) { + if (*c == '/') + __progname = c + 1; + } + } else { + __progname = empty_string; + } + + if (cleanup != NULL) + atexit(cleanup); + + _libc_init(); + + if (&rtld_DYNAMIC == NULL) { +#ifdef HAS_IPLTA + fix_iplta(); +#endif +#ifdef HAS_IPLT + fix_iplt(); +#endif + } + + _preinit(); + +#ifdef MCRT0 + atexit(_mcleanup); + monstartup((u_long)&__eprol, (u_long)&__etext); +#endif + + atexit(_finiarray); + _initarray(); + +#ifndef HAVE_INITFINI_ARRAY + atexit(_fini); + _init(); +#endif + + exit(main(ps_strings->ps_nargvstr, ps_strings->ps_argvstr, environ)); +} diff --git a/lib/libc/netbsd/lib/csu/common/crtbegin.c b/lib/libc/netbsd/lib/csu/common/crtbegin.c new file mode 100644 index 0000000000..e74fda3952 --- /dev/null +++ b/lib/libc/netbsd/lib/csu/common/crtbegin.c @@ -0,0 +1,135 @@ +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ +#include +__RCSID("$NetBSD: crtbegin.c,v 1.17 2018/12/28 18:17:11 christos Exp $"); + +/* zig patch: no crtbegin.h */ + +typedef void (*fptr_t)(void); + +/* zig patch: remove gcj nonsense */ + +#if !defined(HAVE_INITFINI_ARRAY) +extern __dso_hidden const fptr_t __CTOR_LIST__start __asm("__CTOR_LIST__"); + +__dso_hidden const fptr_t __aligned(sizeof(void *)) __CTOR_LIST__[] __section(".ctors") = { + (fptr_t) -1, +}; +__dso_hidden extern const fptr_t __CTOR_LIST_END__[]; +#endif + +#ifdef SHARED +__dso_hidden void *__dso_handle = &__dso_handle; + +__weakref_visible void cxa_finalize(void *) + __weak_reference(__cxa_finalize); +#else +__dso_hidden void *__dso_handle; +#endif + +#if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__) +__dso_hidden const long __EH_FRAME_LIST__[0] __section(".eh_frame"); + +__weakref_visible void register_frame_info(const void *, const void *) + __weak_reference(__register_frame_info); +__weakref_visible void deregister_frame_info(const void *) + __weak_reference(__deregister_frame_info); + +static long dwarf_eh_object[8]; +#endif + +static void __do_global_ctors_aux(void) __used; + +/* zig patch: use .init_array */ +__attribute__((constructor)) +static void +__do_global_ctors_aux(void) +{ + static unsigned char __initialized; + + if (__initialized) + return; + + __initialized = 1; + +#if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__) + if (register_frame_info) + register_frame_info(__EH_FRAME_LIST__, &dwarf_eh_object); +#endif + + /* zig patch: remove gcj nonsense */ + +#if !defined(HAVE_INITFINI_ARRAY) + for (const fptr_t *p = __CTOR_LIST_END__; p > &__CTOR_LIST__start + 1; ) { + (*(*--p))(); + } +#endif +} + +#if !defined(__ARM_EABI__) || defined(SHARED) || defined(__ARM_DWARF_EH__) +#if !defined(HAVE_INITFINI_ARRAY) +extern __dso_hidden const fptr_t __DTOR_LIST__start __asm("__DTOR_LIST__"); + +__dso_hidden const fptr_t __aligned(sizeof(void *)) __DTOR_LIST__[] __section(".dtors") = { + (fptr_t) -1, +}; +__dso_hidden extern const fptr_t __DTOR_LIST_END__[]; +#endif + +static void __do_global_dtors_aux(void) __used; + +/* zig patch: use .fini_array */ +__attribute__((destructor)) +static void +__do_global_dtors_aux(void) +{ + static unsigned char __finished; + + if (__finished) + return; + + __finished = 1; + +#ifdef SHARED + if (cxa_finalize) + (*cxa_finalize)(__dso_handle); +#endif + +#if !defined(HAVE_INITFINI_ARRAY) + for (const fptr_t *p = &__DTOR_LIST__start + 1; p < __DTOR_LIST_END__; ) { + (*(*p++))(); + } +#endif + +#if !defined(__ARM_EABI__) || defined(__ARM_DWARF_EH__) + if (deregister_frame_info) + deregister_frame_info(__EH_FRAME_LIST__); +#endif +} +#endif /* !__ARM_EABI__ || SHARED || __ARM_DWARF_EH__ */ diff --git a/lib/libc/netbsd/lib/csu/common/csu-common.h b/lib/libc/netbsd/lib/csu/common/csu-common.h new file mode 100644 index 0000000000..786ad0355a --- /dev/null +++ b/lib/libc/netbsd/lib/csu/common/csu-common.h @@ -0,0 +1,38 @@ +/*- + * Copyright (c) 2021 The NetBSD Foundation, Inc. + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +/* + * For historical reasons the following symbols are defined both in libc + * and csu and need to be common + */ +#if __has_attribute(__common__) +#define __common __attribute((__common__)) +#else +#define __common +#endif +extern char *__progname __common; +extern char **environ __common; +extern struct ps_strings *__ps_strings __common; diff --git a/lib/libc/netbsd/lib/csu/common/sysident.S b/lib/libc/netbsd/lib/csu/common/sysident.S new file mode 100644 index 0000000000..2f2dcc2fdd --- /dev/null +++ b/lib/libc/netbsd/lib/csu/common/sysident.S @@ -0,0 +1,89 @@ +/* $NetBSD: sysident.S,v 1.3 2014/05/14 14:59:14 joerg Exp $ */ + +/* + * Copyright (c) 1997 Christopher G. Demetriou + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * NetBSD Project. See http://www.NetBSD.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 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. + * + * <> + */ + +/* + * Here we define the NetBSD OS Version in an ELF .note section, structured + * like: + * + * [NOTE HEADER] + * long name size + * long description size + * long note type + * + * [NOTE DATUM] + * string OS name + * + * OSVERSION notes also have: + * long OS version (__NetBSD_Version__ constant from param.h) + * + * The DATUM fields should be padded out such that their actual (not + * declared) sizes % 4 == 0. + * + * These are used by the kernel to determine if this binary is really a + * NetBSD binary, or some other OS's. + */ + +#include "sysident_assym.h" + + .section ".note.netbsd.ident", "a" + .p2align 2 + + .long ELF_NOTE_NETBSD_NAMESZ + .long ELF_NOTE_NETBSD_DESCSZ + .long ELF_NOTE_TYPE_NETBSD_TAG + .ascii "NetBSD\0\0" /* ELF_NOTE_NETBSD_NAME */ + .long __NetBSD_Version__ + + .section ".note.netbsd.pax", "a" + .p2align 2 + + .long ELF_NOTE_PAX_NAMESZ + .long ELF_NOTE_PAX_DESCSZ + .long ELF_NOTE_TYPE_PAX_TAG + .ascii "PaX\0" /* ELF_NOTE_PAX_NAME */ + .long 0 + +#ifdef ELF_NOTE_MARCH_DESC + .section ".note.netbsd.march", "a" + .p2align 2 + + .long ELF_NOTE_MARCH_NAMESZ + .long ELF_NOTE_MARCH_DESCSZ + .long ELF_NOTE_TYPE_MARCH_TAG + .ascii "NetBSD\0\0" + .asciz ELF_NOTE_MARCH_DESC + .p2align 2 +#endif diff --git a/lib/libc/netbsd/lib/csu/common/sysident_assym.h b/lib/libc/netbsd/lib/csu/common/sysident_assym.h new file mode 100644 index 0000000000..fe85e0a9d8 --- /dev/null +++ b/lib/libc/netbsd/lib/csu/common/sysident_assym.h @@ -0,0 +1,17 @@ +/* zig patch: manually expanded from sysident_assym.cf */ + +#define ELF_NOTE_NETBSD_NAMESZ 7 +#define ELF_NOTE_NETBSD_DESCSZ 4 +#define ELF_NOTE_TYPE_NETBSD_TAG 1 +#define ELF_NOTE_PAX_NAMESZ 4 +#define ELF_NOTE_PAX_DESCSZ 4 +#define ELF_NOTE_TYPE_PAX_TAG 3 + +/* zig patch: ELF_NOTE_MARCH_DESC and ELF_NOTE_MARCH_DESCSZ defined by the compiler */ +#ifdef ELF_NOTE_MARCH_DESC +#define ELF_NOTE_MARCH_NAMESZ 7 +#define ELF_NOTE_TYPE_MARCH_TAG 5 +#endif + +#define ELF_NOTE_MCMODEL_NAMESZ 7 +#define ELF_NOTE_TYPE_MCMODEL_TAG 6