From 0e26c19a07853422e15444835394ba28e1f17e2a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 1 Aug 2017 15:35:16 +0200 Subject: bsps/powerpc: Add 64-bit CRT init/fini support Update #3082. --- c/src/lib/libbsp/powerpc/qoriq/Makefile.am | 3 ++ c/src/lib/libbsp/powerpc/qoriq/bsp_specs | 2 +- c/src/lib/libbsp/powerpc/qoriq/preinstall.am | 4 +++ c/src/lib/libbsp/powerpc/shared/start/rtems_crti.S | 34 ++++++++++++++++++++++ c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S | 27 +++++++++++++++++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 c/src/lib/libbsp/powerpc/shared/start/rtems_crtn.S 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 + * + * + * 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 #include +#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 + * + * + * 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 -- cgit v1.2.3