Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/matt-nb6-plus]: src/lib/csu/arch/arm Pull from HEAD.



details:   https://anonhg.NetBSD.org/src/rev/dc9363b22081
branches:  matt-nb6-plus
changeset: 774517:dc9363b22081
user:      matt <matt%NetBSD.org@localhost>
date:      Fri Nov 30 23:32:14 2012 +0000

description:
Pull from HEAD.

diffstat:

 lib/csu/arch/arm/Makefile.inc |    4 +-
 lib/csu/arch/arm/crt0.S       |   65 ++++----
 lib/csu/arch/arm/crtbegin.S   |  293 ++++++++++++++++++++++++++++++++++++++++++
 lib/csu/arch/arm/crtend.S     |   55 +++++++
 lib/csu/arch/arm/crti.S       |   10 +-
 lib/csu/arch/arm/crtn.S       |    8 +-
 6 files changed, 391 insertions(+), 44 deletions(-)

diffs (truncated from 516 to 300 lines):

diff -r 88edb6c5f780 -r dc9363b22081 lib/csu/arch/arm/Makefile.inc
--- a/lib/csu/arch/arm/Makefile.inc     Thu Nov 29 18:33:41 2012 +0000
+++ b/lib/csu/arch/arm/Makefile.inc     Fri Nov 30 23:32:14 2012 +0000
@@ -1,5 +1,3 @@
-# $NetBSD: Makefile.inc,v 1.1 2010/08/07 18:01:33 joerg Exp $
+# $NetBSD: Makefile.inc,v 1.1.10.1 2012/11/30 23:32:14 matt Exp $
 
 CPPFLAGS+=     -DELFSIZE=32
-
-
diff -r 88edb6c5f780 -r dc9363b22081 lib/csu/arch/arm/crt0.S
--- a/lib/csu/arch/arm/crt0.S   Thu Nov 29 18:33:41 2012 +0000
+++ b/lib/csu/arch/arm/crt0.S   Fri Nov 30 23:32:14 2012 +0000
@@ -1,11 +1,12 @@
-/*     $NetBSD: crt0.S,v 1.1 2010/08/07 18:01:33 joerg Exp $   */
+/*     $NetBSD: crt0.S,v 1.1.10.1 2012/11/30 23:32:14 matt Exp $       */
 
-/*
- * Copyright (C) 1997 Mark Brinicombe
- * Copyright (C) 1995 Wolfgang Solfrank.
- * Copyright (C) 1995 TooLs GmbH.
+/*-
+ * 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:
@@ -14,43 +15,41 @@
  * 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 TooLs GmbH.
- * 4. The name of TooLs GmbH may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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.
+ * 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 <machine/asm.h>
 
-RCSID("$NetBSD: crt0.S,v 1.1 2010/08/07 18:01:33 joerg Exp $")
+#include <arm/asm.h>
+
+RCSID("$NetBSD: crt0.S,v 1.1.10.1 2012/11/30 23:32:14 matt Exp $")
 
 STRONG_ALIAS(_start,__start)
 
 _ENTRY(__start)
-       mov     r5, r2          /* cleanup */
-       mov     r4, r1          /* obj_main */
-       mov     r3, r0          /* ps_strings */
-       /* Get argc, argv, and envp from stack */
-       ldr     r0, [sp, #0x0000]
-       add     r1, sp, #0x0004
-       add     r2, r1, r0, lsl #2
-       add     r2, r2, #0x0004
+       /*
+        * 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
-       sub     sp, sp, #8
-       str     r5, [sp, #4]
-       str     r4, [sp, #0]
+
+       /*
+        * void ___start(void (*cleanup)(void),
+        *    const Obj_Entry *obj,
+        *    struct ps_strings *ps_strings);
+        */
 
        b       ___start
diff -r 88edb6c5f780 -r dc9363b22081 lib/csu/arch/arm/crtbegin.S
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/csu/arch/arm/crtbegin.S       Fri Nov 30 23:32:14 2012 +0000
@@ -0,0 +1,293 @@
+/*     $NetBSD: crtbegin.S,v 1.4.6.2 2012/11/30 23:32:14 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.4.6.2 2012/11/30 23:32:14 matt Exp $")
+
+       .section        .ctors, "aw", %progbits
+       .p2align 2
+__CTOR_LIST__:
+       .word -1
+
+       .section        .dtors, "aw", %progbits
+       .p2align 2
+__DTOR_LIST__:
+       .word -1
+
+       .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
+
+       .local  __dwarf_eh_object
+       .comm   __dwarf_eh_object,24
+       .local  __initialized
+       .comm   __initialized,1
+       .local  __finished
+       .comm   __finished,1
+
+       .text
+/*
+ * All variables are local to this DSO so we can skip using GOT references
+ * and instead use PCREL references to access them.  We do this regardless
+ * of being PIC since it isn't any additional overhead to do so.
+ *
+ * We don't setup a TOC since all of ours calls are indirect so it isn't
+ * needed.
+ */
+
+       .type __do_global_dtors_aux, %function
+__do_global_dtors_aux:
+       GOT_INIT(r3, .Ldtors_got, .Ldtors)      /* use r3 temporarily */
+       ldr     r1, .L__finished
+#ifdef PIC
+        ldrb   r0, [r1, r3]!
+#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, r6, r7, fp, ip, lr, pc}
+        sub     fp, ip, #4
+       mov     r7, r3                          /* now that r7 is saved ... */
+
+#ifdef SHARED
+       GOT_GET(ip, r7, .L__cxa_finalize)
+       cmp     ip, #0
+       ldrne   r2, .L__dso_handle              /* GOTOFF */
+       ldrne   r0, [r2, r7]                    /* load relative to GOT */
+#ifdef _ARM_ARCH_4T
+       blxne   ip
+#else
+       movne   lr, pc
+       movne   pc, ip
+#endif
+#endif /* SHARED */
+
+       /*
+        * We know the first entry is -1 so skip it.  We use load with
+        * preincrement to advance the pointer along.
+        */
+       ldr     r4, .L__DTOR_LIST__
+       ldr     r5, .L__DTOR_LIST_END__
+#ifdef PIC
+       add     r4, r4, r7              /* addr = offset + got */
+       add     r5, r5, r7              /* addr = offset + got */
+#endif
+       add     r4, r4, #4              /* skip first entry */
+1:
+       cmp     r4, r5                  /* end of list */
+       ldrne   ip, [r4], #4            /* ip = *r4++; */
+#ifndef SHARED
+        ldmeqfd        sp, {r4, r5, r6, r7, fp, sp, pc} /* restore and return */
+#endif
+       adrne   lr, 1b                  /* set up to return to loop start */
+#ifdef _ARM_ARCH_4T
+       bxne    ip                      /* call it */
+#else
+       movne   pc, ip                  /* call entry */
+#endif
+
+#ifdef SHARED
+       /*
+        * if (__deregister_frame_info)
+        *     __deregister_frame_info(&__EH_FRAME_LIST__[0]);
+        */
+       GOT_GET(ip, r7, .L__deregister_frame_info)
+       cmp     ip, #0
+        ldmeqfd        sp, {r4-r7, fp, sp, pc}         /* restore and return */
+
+       ldr     r1, .L__EH_FRAME_LIST__
+#ifdef PIC
+       add     r0, r1, r7                      /* add offset to GOT addr */
+#endif
+        ldmfd  sp, {r4-r7, fp, sp, lr}         /* restore everthing */
+#ifdef _ARM_ARCH_4T
+       bx      ip                              /* tail call it */
+#else
+       mov     pc, ip                          /* tail call it */
+#endif
+#endif /* SHARED */
+
+       .weak   __deregister_frame_info
+       .weak   __cxa_finalize
+       .hidden _C_LABEL(__DTOR_LIST_END__)
+
+       .align  2
+       GOT_INITSYM(.Ldtors_got, .Ldtors)
+#ifdef SHARED
+.L__deregister_frame_info:
+        .word   PIC_SYM(_C_LABEL(__deregister_frame_info), GOT)
+.L__cxa_finalize:
+        .word   PIC_SYM(_C_LABEL(__cxa_finalize), GOT)
+.L__dso_handle:
+        .word   PIC_SYM(_C_LABEL(__dso_handle), GOTOFF)
+#endif
+.L__finished:
+        .word   PIC_SYM(_C_LABEL(__finished), GOTOFF)
+.L__DTOR_LIST__:
+        .word   PIC_SYM(_C_LABEL(__DTOR_LIST__), GOTOFF)
+.L__DTOR_LIST_END__:
+        .word   PIC_SYM(_C_LABEL(__DTOR_LIST_END__), GOTOFF)
+.L__EH_FRAME_LIST__:
+        .word   PIC_SYM(_C_LABEL(__EH_FRAME_LIST__), GOTOFF)
+
+
+       .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
+#ifdef PIC
+        ldrb   r0, [r1, r3]!
+#else
+        ldrb   r0, [r1]
+#endif



Home | Main Index | Thread Index | Old Index