summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-01 15:35:16 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-22 16:27:01 +0200
commit0e26c19a07853422e15444835394ba28e1f17e2a (patch)
tree90f2418bf118a9ae40be41980771d0415730d0dc
parentbsps/powerpc: Rename ppc_exc_wrap_async_normal_end (diff)
downloadrtems-0e26c19a07853422e15444835394ba28e1f17e2a.tar.bz2
bsps/powerpc: Add 64-bit CRT init/fini support
Update #3082.
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/Makefile.am3
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/bsp_specs2
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/preinstall.am4
-rw-r--r--c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S34
-rw-r--r--c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S27
5 files changed, 69 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
index f24b0ca060..166c16bd76 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
+++ b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
@@ -39,6 +39,9 @@ project_lib_DATA = start.$(OBJEXT)
libbspstart_a_SOURCES += ../../powerpc/shared/start/rtems_crti.S
project_lib_DATA += rtems_crti.$(OBJEXT)
+libbspstart_a_SOURCES += ../../powerpc/shared/start/rtems_crtn.S
+project_lib_DATA += rtems_crtn.$(OBJEXT)
+
dist_project_lib_DATA += startup/linkcmds \
../shared/startup/linkcmds.base \
startup/linkcmds.qoriq_core_0 \
diff --git a/c/src/lib/libbsp/powerpc/qoriq/bsp_specs b/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
index 92f6c582e8..6fc7e3dc67 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
+++ b/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
@@ -7,7 +7,7 @@
%{!nostdlib: %{qrtems: ecrti%O%s rtems_crti%O%s crtbegin.o%s start.o%s}}
*endfile:
-%{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s ecrtn.o%s}
+%{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s rtems_crtn.o%s ecrtn.o%s}
*link:
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -u __vectors -N}
diff --git a/c/src/lib/libbsp/powerpc/qoriq/preinstall.am b/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
index 85871e65c9..2cc68c7747 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
+++ b/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
@@ -113,6 +113,10 @@ $(PROJECT_LIB)/rtems_crti.$(OBJEXT): rtems_crti.$(OBJEXT) $(PROJECT_LIB)/$(dirst
$(INSTALL_DATA) $< $(PROJECT_LIB)/rtems_crti.$(OBJEXT)
TMPINSTALL_FILES += $(PROJECT_LIB)/rtems_crti.$(OBJEXT)
+$(PROJECT_LIB)/rtems_crtn.$(OBJEXT): rtems_crtn.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_LIB)/rtems_crtn.$(OBJEXT)
+TMPINSTALL_FILES += $(PROJECT_LIB)/rtems_crtn.$(OBJEXT)
+
$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
diff --git a/c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S b/c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S
index c72e1958f0..a664ae2522 100644
--- a/c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S
+++ b/c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S
@@ -1,7 +1,40 @@
+/*
+ * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
/* rtems_crti.S */
#include <rtems/asm.h>
#include <rtems/score/cpu.h>
+#if defined(__powerpc64__)
+ .section ".init","ax"
+ .align 2
+ .globl _init
+ .type _init,@function
+_init:
+ mflr r0
+ std r0,16(1)
+ stdu r1,-96(1)
+
+ .section ".fini","ax"
+ .align 2
+ .globl _fini
+ .type _fini,@function
+_fini:
+ mflr r0
+ std r0,16(r1)
+ stdu r1,-96(r1)
+#else
/* terminate the __init() function and create
* a new head '_init' for use by RTEMS to
* invoke C++ global constructors
@@ -32,3 +65,4 @@ _init:
stwu r1,-16(r1)
mflr r0
stw r0,20(r1)
+#endif
diff --git a/c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S b/c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S
new file mode 100644
index 0000000000..747d83dbce
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if defined(__powerpc64__)
+ .section ".init","ax"
+ addi 1,1,96
+ ld 0,16(1)
+ mtlr 0
+ blr
+
+ .section ".fini","ax"
+ addi 1,1,96
+ ld 0,16(1)
+ mtlr 0
+ blr
+#endif