svn commit: r342974 - in head: gnu/lib/csu lib/csu/powerpc lib/csu/powerpc64
Justin Hibbits
jhibbits at FreeBSD.org
Sat Jan 12 21:29:55 UTC 2019
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, at 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
More information about the svn-src-head
mailing list