Module Name:    src
Committed By:   matt
Date:           Mon Aug 13 02:49:04 UTC 2012

Added Files:
        src/lib/csu/arch/earm: Makefile.inc crt0.S crtbegin.S crtend.S crti.S
            crtn.S

Log Message:
crt* files for ARM EABI.  This is pretty different from OABI.  crti.S only
has sysident, crtn.S is empty.  True dtor/ctor processing is done elsewhere
(in crt0.o for static or the rtld for dynamic images).  All that is done in
here is either a call to __cxa_finalize (dtor, only when SHARED) or
register_frame_info and _JV_RegisterClasses.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/lib/csu/arch/earm/Makefile.inc \
    src/lib/csu/arch/earm/crt0.S src/lib/csu/arch/earm/crtbegin.S \
    src/lib/csu/arch/earm/crtend.S src/lib/csu/arch/earm/crti.S \
    src/lib/csu/arch/earm/crtn.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/lib/csu/arch/earm/Makefile.inc
diff -u /dev/null src/lib/csu/arch/earm/Makefile.inc:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/Makefile.inc	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,5 @@
+# $NetBSD: Makefile.inc,v 1.1 2012/08/13 02:49:04 matt Exp $
+
+CPPFLAGS+=	-DELFSIZE=32
+CPPFLAGS+=	-DHAVE_INITFINI_ARRAY
+
Index: src/lib/csu/arch/earm/crt0.S
diff -u /dev/null src/lib/csu/arch/earm/crt0.S:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/crt0.S	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,55 @@
+/*	$NetBSD: crt0.S,v 1.1 2012/08/13 02:49:04 matt 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 <arm/asm.h>
+
+RCSID("$NetBSD: crt0.S,v 1.1 2012/08/13 02:49:04 matt Exp $")
+
+STRONG_ALIAS(_start,__start)
+
+_ENTRY(__start)
+	/*
+	 * We need to swap ps_strings and cleanup
+ 	 */
+	mov	ip, r0		/* ps_strings -> tmp */
+	mov	r0, r2		/* cleanup -> ps_strings */
+	mov	r2, ip		/* tmp -> ps_strings */
+
+	/* Ensure the stack is properly aligned before calling C code. */
+	bic	sp, sp, #7
+
+	/*
+	 * void ___start(void (*cleanup)(void),
+	 *    const Obj_Entry *obj,
+	 *    struct ps_strings *ps_strings);
+	 */
+
+	b	___start
Index: src/lib/csu/arch/earm/crtbegin.S
diff -u /dev/null src/lib/csu/arch/earm/crtbegin.S:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/crtbegin.S	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,216 @@
+/*	$NetBSD: crtbegin.S,v 1.1 2012/08/13 02:49:04 matt 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 <arm/asm.h>
+
+RCSID("$NetBSD: crtbegin.S,v 1.1 2012/08/13 02:49:04 matt Exp $")
+
+	.section	.eh_frame, "a", %progbits
+	.p2align 2
+__EH_FRAME_LIST__:
+
+	.section	.jcr, "aw", %progbits
+	.p2align 2
+__JCR_LIST__:
+
+	.section	.data.rel, "aw", %progbits
+	.p2align 2
+	.type	__dso_handle, %object
+	.size	__dso_handle, 4
+	.globl	__dso_handle
+	.hidden	__dso_handle
+__dso_handle:
+#ifdef SHARED
+	.word	__dso_handle
+#else
+	.word	0
+#endif
+
+	.text
+#ifdef SHARED
+	/*
+	 * If we aren't shared, all we do is set finished
+	 * to 1 if it isn't 1 already.  So why bother do that at all?
+	 */
+	.type __do_global_dtors_aux, %function
+__do_global_dtors_aux:
+	GOT_INIT(r3, .Ldtors_got, .Ldtors) 	/* use r3 temporarily */
+	ldr	r1, .L__finished		/* GOTOFF */
+	ldrb	r0, [r1, r3]!
+	cmp	r0, #0				/* done this already? */
+	RETc(ne)
+	mov	r0, #1
+	strb	r0, [r1]			/* mark it as done */
+
+	GOT_GET(ip, r3, .L__cxa_finalize)
+	cmp	ip, #0
+	RETc(eq)
+	ldr	r0, .L__dso_handle		/* GOTOFF */
+	ldr	r0, [r0, r3]			/* load relative to got */
+#if defined(_ARM_ARCH_4T)
+	bx	ip				/* tail call */
+#else
+	mov	pc, ip
+#endif
+
+#if 0	/* not used */
+	/*
+	 * if (__deregister_frame_info)
+	 *     __deregister_frame_info(&__EH_FRAME_LIST__[0]);
+	 */
+	GOT_GET(ip, r3, .L__deregister_frame_info)
+	cmp	ip, #0
+	ldmeqfd	sp, {r4, r5, fp, sp, pc}	/* restore and return */
+
+	ldr	r1, .L__EH_FRAME_LIST__		/* GOTOFF */
+	add	r1, r1, r4			/* add got addr */
+	ldmfd	sp, {r4, r5, fp, sp, lr}	/* restore everthing */
+#if !defined(_ARM_ARCH_4T)
+	bx	ip				/* tail call it */
+#else
+	mov	pc, ip				/* tail call it */
+#endif
+#endif /* notused */
+
+	.weak	__cxa_finalize
+	.weak	__deregister_frame_info
+
+	.align	2
+	GOT_INITSYM(.Ldtors_got, .Ldtors)
+.L__cxa_finalize:
+	.word	PIC_SYM(_C_LABEL(__cxa_finalize), GOT)
+#if 0
+.L__deregister_frame_info:
+	.word	PIC_SYM(_C_LABEL(__deregister_frame_info), GOT)
+#endif
+.L__finished:
+	.word	PIC_SYM(_C_LABEL(__finished), GOTOFF)
+.L__dso_handle:
+	.word	PIC_SYM(_C_LABEL(__dso_handle), GOTOFF)
+
+	.pushsection .fini_array,"aw",%fini_array
+	.p2align 2
+	.word	__do_global_dtors_aux
+	.popsection
+#endif /* SHARED */
+
+	.local	__finished
+	.comm	__finished,1,1
+
+	.weak	__register_frame_info
+	.weak	_Jv_RegisterClasses
+
+	.type __do_global_ctors_aux, %function
+__do_global_ctors_aux:
+	GOT_INIT(r3, .Lctors_got, .Lctors) 
+	ldr	r1, .L__initialized		/* GOTOFF if PIC */
+#ifdef PIC
+	ldrb	r0, [r1, r3]!			/* r1 = r1 + got */
+#else
+	ldrb	r0, [r1]
+#endif
+	cmp	r0, #0				/* done this already? */
+	RETc(ne)
+	mov	r0, #1
+	strb	r0, [r1]			/* mark it as done */
+
+	mov	ip, sp
+	stmfd	sp!, {r4, r5, fp, ip, lr, pc}
+	sub	fp, ip, #4
+	mov	r4, r3				/* now that r4 is saved ... */
+
+	/*
+	 * if (__register_frame_info)
+	 *     __register_frame_info(&__EH_FRAME_LIST__[0], &__dwarf_eh_object)
+	 */
+	GOT_GET(ip, r4, .L__register_frame_info)
+	cmp	ip, #0
+	beq	1f
+
+	ldr	r0, .L__EH_FRAME_LIST__
+	ldr	r1, .L__dwarf_eh_object
+#ifdef PIC
+	add	r0, r0, r4
+	add	r1, r1, r4
+#endif
+
+#if defined(_ARM_ARCH_4T)
+	blx	ip
+#else
+	mov	lr, pc
+	mov	pc, ip
+#endif
+1:
+	/*
+	 * if (_Jv_RegisterClasses && __JCR_LIST__[0])
+	 *     _Jv_RegisterClasses(&__JCR_LIST__[0]);
+	 */
+	GOT_GET(ip, r4, .L_Jv_RegisterClasses)
+	cmp	ip, #0
+	ldmeqfd	sp, {r4, r5, fp, sp, pc}	/* return if null */
+
+	ldr	r0, .L__JCR_LIST__
+#ifdef PIC
+	ldr	r2, [r0, r4]!			/* GOTOFF + got == address */
+#else
+	ldr	r2, [r0]
+#endif
+	cmp	r2, #0
+	ldmfd	sp, {r4, r5, fp, sp, lr}	/* restore everything */
+	RETc(eq)				/* return if null */
+#if defined(_ARM_ARCH_4T)
+	bx	ip		/* return or tail call */
+#else
+	mov	pc, ip		/* return or tail call */
+#endif
+
+	.p2align 2
+	GOT_INITSYM(.Lctors_got, .Lctors)
+.L__register_frame_info:
+	.word	PIC_SYM(_C_LABEL(__register_frame_info), GOT)
+.L_Jv_RegisterClasses:
+	.word	PIC_SYM(_C_LABEL(_Jv_RegisterClasses), GOT)
+.L__initialized:
+	.word	PIC_SYM(_C_LABEL(__initialized), GOTOFF)
+.L__EH_FRAME_LIST__:
+	.word	PIC_SYM(_C_LABEL(__EH_FRAME_LIST__), GOTOFF)
+.L__dwarf_eh_object:
+	.word	PIC_SYM(_C_LABEL(__dwarf_eh_object), GOTOFF)
+.L__JCR_LIST__:
+	.word	PIC_SYM(_C_LABEL(__JCR_LIST__), GOTOFF)
+
+	.local	__initialized
+	.comm	__initialized,1,1
+	.local	__dwarf_eh_object
+	.comm	__dwarf_eh_object,24,4
+
+	.section .init_array,"aw",%init_array
+	.p2align 2
+	.word	__do_global_ctors_aux
Index: src/lib/csu/arch/earm/crtend.S
diff -u /dev/null src/lib/csu/arch/earm/crtend.S:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/crtend.S	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,54 @@
+/*	$NetBSD: crtend.S,v 1.1 2012/08/13 02:49:04 matt Exp $	*/
+/*-
+ * 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 <arm/asm.h>
+
+RCSID("$NetBSD: crtend.S,v 1.1 2012/08/13 02:49:04 matt Exp $")
+
+	.fpu softvfp
+	.eabi_attribute 18, 4		/* sizeof(wchar_t) */
+	.eabi_attribute 23, 0		/* doesn't use floating point */
+	.eabi_attribute 24, 1		/* 8 byte alignment permitted */
+	.eabi_attribute 25, 1		/* preserves 8-byte alignment */
+	.eabi_attribute 26, 2		/* enums are 32-bits */
+
+	.section	.eh_frame, "a", %progbits
+	.p2align 2
+	.global		__EH_FRAME_END__
+	.hidden 	__EH_FRAME_END__
+__EH_FRAME_END__:
+	.space	4
+
+	.section	.jcr, "aw", %progbits
+	.p2align 2
+	.global		__JCR_END__
+	.hidden 	__JCR_END__
+__JCR_END__:
+	.space	4
Index: src/lib/csu/arch/earm/crti.S
diff -u /dev/null src/lib/csu/arch/earm/crti.S:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/crti.S	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,41 @@
+/* $NetBSD: crti.S,v 1.1 2012/08/13 02:49:04 matt 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 <arm/asm.h>
+
+RCSID("$NetBSD: crti.S,v 1.1 2012/08/13 02:49:04 matt Exp $")
+
+#include "sysident.S"
+
+/*
+ * Since ARM EABI uses .init_array/.fini_array,
+ * there is no need for .init/.fini
+ */
Index: src/lib/csu/arch/earm/crtn.S
diff -u /dev/null src/lib/csu/arch/earm/crtn.S:1.1
--- /dev/null	Mon Aug 13 02:49:04 2012
+++ src/lib/csu/arch/earm/crtn.S	Mon Aug 13 02:49:04 2012
@@ -0,0 +1,3 @@
+/* $NetBSD: crtn.S,v 1.1 2012/08/13 02:49:04 matt Exp $ */
+
+/* no need for anything here since ARM EABI uses .init_array/.fini_array */

Reply via email to