Author: jhibbits
Date: Sat Jan 12 21:29:54 2019
New Revision: 342974
URL: https://svnweb.freebsd.org/changeset/base/342974

Log:
  Create crtsavres.o for powerpc builds
  
  Summary:
  GCC expects to link in a crtsavres.o on powerpc platforms.  On
  powerpc64 this is an empty file, but on powerpc and powerpcspe this does 
contain
  some save/restore functions, which may not actually be necessary for newer
  modern GCC and clang.  This appeases the in-tree gcc, though, and is needed in
  order to switch to the BSD CRTRBEGIN.
  
  PR:   233751
  Reviewed By: andrew
  Differential Revision: https://reviews.freebsd.org/D18826

Added:
  head/lib/csu/powerpc/crtsavres.S   (contents, props changed)
Modified:
  head/gnu/lib/csu/Makefile
  head/lib/csu/powerpc/Makefile
  head/lib/csu/powerpc64/Makefile

Modified: head/gnu/lib/csu/Makefile
==============================================================================
--- head/gnu/lib/csu/Makefile   Sat Jan 12 20:41:57 2019        (r342973)
+++ head/gnu/lib/csu/Makefile   Sat Jan 12 21:29:54 2019        (r342974)
@@ -28,10 +28,6 @@ CRTS_CFLAGS= -DCRTSTUFFS_O -DSHARED ${PICFLAG}
 CFLAGS+=       -DTARGET_ARM_EABI
 .endif
 
-.if ${MACHINE_CPUARCH} == "powerpc"
-TGTOBJS=       crtsavres.o
-SRCS+=         crtsavres.asm
-.endif
 .if ${MACHINE_CPUARCH} == "sparc64"
 TGTOBJS=       crtfastmath.o
 SRCS+=         crtfastmath.c

Modified: head/lib/csu/powerpc/Makefile
==============================================================================
--- head/lib/csu/powerpc/Makefile       Sat Jan 12 20:41:57 2019        
(r342973)
+++ head/lib/csu/powerpc/Makefile       Sat Jan 12 21:29:54 2019        
(r342974)
@@ -2,7 +2,7 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=          crt1.c crti.S crtn.S
+SRCS=          crt1.c crti.S crtn.S crtsavres.S
 OBJS=          ${SRCS:N*.h:R:S/$/.o/g}
 OBJS+=         Scrt1.o gcrt1.o
 CFLAGS+=       -I${.CURDIR:H}/common \

Added: head/lib/csu/powerpc/crtsavres.S
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/csu/powerpc/crtsavres.S    Sat Jan 12 21:29:54 2019        
(r342974)
@@ -0,0 +1,191 @@
+/*-
+ * SPDX-License-Identifier: BSD-1-Clause
+ *
+ * Copyright 2019 Justin Hibbits
+ *
+ * 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.
+ *
+ * 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 <machine/asm.h>
+__FBSDID("$FreeBSD$");
+
+.text
+
+/*
+ * The PowerPC ABI spec requires the following save/restore functions to be
+ * provided:
+ *
+ * _savefpr_N
+ * _restfpr_N
+ * _restfpr_N_x
+ * _savegpr_N
+ * _restgpr_N
+ * _restgpr_N_x
+ * 
+ * With N ranging from 14 to 31, to save the nonvolatile registers.
+ */
+
+#define _CRTENTRY(name) \
+       .text; \
+       .globl  name; \
+       .type   name,@function; \
+       name:
+
+#define SAVEFPR(r)     _CRTENTRY(__CONCAT(_savefpr_,r))        \
+       stfd    r,(-256 + r * 8)(11)
+
+SAVEFPR(14)
+SAVEFPR(15)
+SAVEFPR(16)
+SAVEFPR(17)
+SAVEFPR(18)
+SAVEFPR(19)
+SAVEFPR(20)
+SAVEFPR(21)
+SAVEFPR(22)
+SAVEFPR(23)
+SAVEFPR(24)
+SAVEFPR(25)
+SAVEFPR(26)
+SAVEFPR(27)
+SAVEFPR(28)
+SAVEFPR(29)
+SAVEFPR(30)
+SAVEFPR(31)
+       blr
+
+#define RESTFPR(r)     _CRTENTRY(__CONCAT(_restfpr_,r))        \
+       lfd     r,(-256 + r * 8)(11)
+
+RESTFPR(14)
+RESTFPR(15)
+RESTFPR(16)
+RESTFPR(17)
+RESTFPR(18)
+RESTFPR(19)
+RESTFPR(20)
+RESTFPR(21)
+RESTFPR(22)
+RESTFPR(23)
+RESTFPR(24)
+RESTFPR(25)
+RESTFPR(26)
+RESTFPR(27)
+RESTFPR(28)
+RESTFPR(29)
+RESTFPR(30)
+RESTFPR(31)
+       blr
+
+#define SAVEGPR(r)     _CRTENTRY(__CONCAT(_savegpr_,r))        \
+       stfd    r,(-128 + r*4)(11)
+
+SAVEGPR(14)
+SAVEGPR(15)
+SAVEGPR(16)
+SAVEGPR(17)
+SAVEGPR(18)
+SAVEGPR(19)
+SAVEGPR(20)
+SAVEGPR(21)
+SAVEGPR(22)
+SAVEGPR(23)
+SAVEGPR(24)
+SAVEGPR(25)
+SAVEGPR(26)
+SAVEGPR(27)
+SAVEGPR(28)
+SAVEGPR(29)
+SAVEGPR(30)
+SAVEGPR(31)
+       blr
+
+#define RESTGPR(r)     _CRTENTRY(__CONCAT(_restgpr_,r))        \
+       lwz     r,(-128 + r*4)(11)
+
+RESTGPR(14)
+RESTGPR(15)
+RESTGPR(16)
+RESTGPR(17)
+RESTGPR(18)
+RESTGPR(19)
+RESTGPR(20)
+RESTGPR(21)
+RESTGPR(22)
+RESTGPR(23)
+RESTGPR(24)
+RESTGPR(25)
+RESTGPR(26)
+RESTGPR(27)
+RESTGPR(28)
+RESTGPR(29)
+RESTGPR(30)
+RESTGPR(31)
+       blr
+
+#define RESTFPR_X(r)   _CRTENTRY(__CONCAT(__CONCAT(_restfpr_,r),_x))   \
+       lfd     r,(-256 + r * 8)(11)
+
+RESTFPR_X(14)
+RESTFPR_X(15)
+RESTFPR_X(16)
+RESTFPR_X(17)
+RESTFPR_X(18)
+RESTFPR_X(19)
+RESTFPR_X(20)
+RESTFPR_X(21)
+RESTFPR_X(22)
+RESTFPR_X(23)
+RESTFPR_X(24)
+RESTFPR_X(25)
+RESTFPR_X(26)
+RESTFPR_X(27)
+RESTFPR_X(28)
+RESTFPR_X(29)
+RESTFPR_X(30)
+RESTFPR_X(31)
+       lwz     0,4(11)
+       mtlr    0
+       mr      1,11
+       blr
+
+#define RESTGPR_X(r)   _CRTENTRY(__CONCAT(__CONCAT(_restgpr_,r),_x))   \
+       lwz     r,(-128 + r*4)(11)
+
+RESTGPR_X(14)
+RESTGPR_X(15)
+RESTGPR_X(16)
+RESTGPR_X(17)
+RESTGPR_X(18)
+RESTGPR_X(19)
+RESTGPR_X(20)
+RESTGPR_X(21)
+RESTGPR_X(22)
+RESTGPR_X(23)
+RESTGPR_X(24)
+RESTGPR_X(25)
+RESTGPR_X(26)
+RESTGPR_X(27)
+RESTGPR_X(28)
+RESTGPR_X(29)
+RESTGPR_X(30)
+RESTGPR_X(31)
+       lwz     0,4(11)
+       mtlr    0
+       mr      1,11
+       blr

Modified: head/lib/csu/powerpc64/Makefile
==============================================================================
--- head/lib/csu/powerpc64/Makefile     Sat Jan 12 20:41:57 2019        
(r342973)
+++ head/lib/csu/powerpc64/Makefile     Sat Jan 12 21:29:54 2019        
(r342974)
@@ -4,7 +4,7 @@
 
 SRCS=          crt1.c crti.S crtn.S
 OBJS=          ${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=         Scrt1.o gcrt1.o
+OBJS+=         crtsavres.o Scrt1.o gcrt1.o
 CFLAGS+=       -I${.CURDIR:H}/common \
                -I${SRCTOP}/lib/libc/include \
                -mlongcall -DCRT_IRELOC_SUPPRESS
@@ -18,7 +18,7 @@ FILESDIR=     ${LIBDIR}
 .undef LIBRARIES_ONLY
 
 CLEANFILES=    ${OBJS}
-CLEANFILES+=   crt1.s gcrt1.s Scrt1.s
+CLEANFILES+=   crt1.s crtsavres.s gcrt1.s Scrt1.s
 
 # See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
 # directly compiled to .o files.
@@ -26,6 +26,10 @@ CLEANFILES+= crt1.s gcrt1.s Scrt1.s
 crt1.s: crt1.c
        ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
        sed ${SED_FIX_NOTE} ${.TARGET}
+
+# On powerpc64 crtsavres is an empty file
+crtsavres.s:
+       touch ${.TARGET}
 
 crt1.o: crt1.s
        ${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to