This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [patch] Altera Nios II support (version 3)
- From: Sandra Loosemore <sandra at codesourcery dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: <newlib at sourceware dot org>, Jeff Johnston <jjohnstn at redhat dot com>
- Date: Sun, 5 May 2013 16:37:23 -0600
- Subject: Re: [patch] Altera Nios II support (version 3)
- References: <51841B5C dot 9090100 at codesourcery dot com> <Pine dot LNX dot 4 dot 64 dot 1305032029510 dot 30366 at digraph dot polyomino dot org dot uk>
On 05/03/2013 02:30 PM, Joseph S. Myers wrote:
On Fri, 3 May 2013, Sandra Loosemore wrote:
Here is a revised version of the Nios II patch. It is identical to the one
previously posted
http://sourceware.org/ml/newlib/2013/msg00264.html
except that setjmp.s now has a copyright notice (provided by Altera).
As this is a new copyright notice, it should be added at the bottom of the
toplevel COPYING.NEWLIB.
Like this?
-Sandra
2013-05-05 Sandra Loosemore <sandra@codesourcery.com>
Based on patches from Altera Corporation.
* COPYING.NEWLIB: Add Altera Corporation copyright.
* configure.ac (noconfigdirs [nios2-*-*]): Add target-libgloss.
* configure: Regenerated.
newlib/
* configure.host (machine_dir, sys_dir, syscall_dir, newlib_cflags):
Add settings for nios2*.
* libc/include/machine/ieeefp.h (IEEE_BIG_ENDIAN, IEEE_LITTLE_ENDIAN):
Likewise.
* libc/include/machine/setjmp.h (JBLEN, JBTYPE): Likewise.
* libc/machine/configure.in: Add nios2 subdir.
* libc/machine/configure: Regenerated.
* libc/machine/nios2/Makefile.am: New.
* libc/machine/nios2/Makefile.in: New (autogenerated).
* libc/machine/nios2/aclocal.m4: New (copied from mips version).
* libc/machine/nios2/configure.in: New.
* libc/machine/nios2/configure: New (autogenerated).
* libc/machine/nios2/setjmp.s: New.
Index: COPYING.NEWLIB
===================================================================
RCS file: /cvs/src/src/COPYING.NEWLIB,v
retrieving revision 1.31
diff -u -p -r1.31 COPYING.NEWLIB
--- COPYING.NEWLIB 9 Mar 2012 20:31:34 -0000 1.31
+++ COPYING.NEWLIB 5 May 2013 22:23:10 -0000
@@ -894,3 +894,34 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS;
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.
+
+(40) - Altera Corportion (nios2-* targets)
+
+Copyright (c) 2003 Altera Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ o Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ o 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.
+ o Neither the name of Altera Corporation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY ALTERA CORPORATION, THE COPYRIGHT HOLDER,
+AND ITS 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 COPYRIGHT HOLDER 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.
+
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/configure.ac,v
retrieving revision 1.188
diff -u -p -r1.188 configure.ac
--- configure.ac 22 Apr 2013 15:25:09 -0000 1.188
+++ configure.ac 5 May 2013 22:23:10 -0000
@@ -1057,6 +1057,9 @@ case "${target}" in
mt-*-*)
noconfigdirs="$noconfigdirs sim"
;;
+ nios2-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss"
+ ;;
powerpc-*-aix*)
# copied from rs6000-*-* entry
noconfigdirs="$noconfigdirs gprof"
Index: newlib/configure.host
===================================================================
RCS file: /cvs/src/src/newlib/configure.host,v
retrieving revision 1.127
diff -u -p -r1.127 configure.host
--- newlib/configure.host 4 Dec 2012 21:43:20 -0000 1.127
+++ newlib/configure.host 5 May 2013 22:23:10 -0000
@@ -227,6 +227,9 @@ case "${host_cpu}" in
mt*)
machine_dir=mt
;;
+ nios2*)
+ machine_dir=nios2
+ ;;
or16)
;;
or32)
@@ -476,6 +479,9 @@ case "${host}" in
moxie*)
sys_dir=
;;
+ nios2*)
+ sys_dir=
+ ;;
powerpcle-*-pe)
posix_dir=posix
;;
@@ -703,6 +709,10 @@ case "${host}" in
syscall_dir=syscalls
default_newlib_io_long_long="yes"
;;
+ nios2*)
+ syscall_dir=
+ newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
+ ;;
powerpc*-*-eabialtivec*)
default_newlib_io_long_long="yes"
newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
Index: newlib/libc/include/machine/ieeefp.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/machine/ieeefp.h,v
retrieving revision 1.52
diff -u -p -r1.52 ieeefp.h
--- newlib/libc/include/machine/ieeefp.h 26 Sep 2012 20:06:47 -0000 1.52
+++ newlib/libc/include/machine/ieeefp.h 5 May 2013 22:23:10 -0000
@@ -388,6 +388,14 @@
#define __SMALL_BITFIELDS /* 16 Bit INT */
#endif
+#ifdef __NIOS2__
+# ifdef __nios2_big_endian__
+# define __IEEE_BIG_ENDIAN
+# else
+# define __IEEE_LITTLE_ENDIAN
+# endif
+#endif
+
#ifndef __IEEE_BIG_ENDIAN
#ifndef __IEEE_LITTLE_ENDIAN
#error Endianess not declared!!
Index: newlib/libc/include/machine/setjmp.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/machine/setjmp.h,v
retrieving revision 1.49
diff -u -p -r1.49 setjmp.h
--- newlib/libc/include/machine/setjmp.h 23 Apr 2013 09:42:25 -0000 1.49
+++ newlib/libc/include/machine/setjmp.h 5 May 2013 22:23:10 -0000
@@ -287,6 +287,24 @@ _BEGIN_STD_C
#define _JBTYPE unsigned char
#endif
+/*
+ * There are two versions of setjmp()/longjmp():
+ * 1) Compiler (gcc) built-in versions.
+ * 2) Function-call versions.
+ *
+ * The built-in versions are used most of the time. When used, gcc replaces
+ * calls to setjmp()/longjmp() with inline assembly code. The built-in
+ * versions save/restore a variable number of registers.
+
+ * _JBLEN is set to 40 to be ultra-safe with the built-in versions.
+ * It only needs to be 12 for the function-call versions
+ * but this data structure is used by both versions.
+ */
+#ifdef __NIOS2__
+#define _JBLEN 40
+#define _JBTYPE unsigned long
+#endif
+
#ifdef __RX__
#define _JBLEN 0x44
#endif
Index: newlib/libc/machine/configure.in
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/configure.in,v
retrieving revision 1.21
diff -u -p -r1.21 configure.in
--- newlib/libc/machine/configure.in 26 Sep 2012 20:06:47 -0000 1.21
+++ newlib/libc/machine/configure.in 5 May 2013 22:23:10 -0000
@@ -55,6 +55,7 @@ if test -n "${machine_dir}"; then
moxie) AC_CONFIG_SUBDIRS(moxie) ;;
mt) AC_CONFIG_SUBDIRS(mt) ;;
necv70) AC_CONFIG_SUBDIRS(necv70) ;;
+ nios2) AC_CONFIG_SUBDIRS(nios2) ;;
powerpc) AC_CONFIG_SUBDIRS(powerpc) ;;
rl78) AC_CONFIG_SUBDIRS(rl78) ;;
rx) AC_CONFIG_SUBDIRS(rx) ;;
Index: newlib/libc/machine/nios2/Makefile.am
===================================================================
RCS file: newlib/libc/machine/nios2/Makefile.am
diff -N newlib/libc/machine/nios2/Makefile.am
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ newlib/libc/machine/nios2/Makefile.am 5 May 2013 22:23:10 -0000
@@ -0,0 +1,16 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+AM_CCASFLAGS = $(INCLUDES)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = setjmp.s
+lib_a_CCASFLAGS=$(AM_CCASFLAGS)
+lib_a_CFLAGS=$(AM_CFLAGS)
+
+ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
Index: newlib/libc/machine/nios2/configure.in
===================================================================
RCS file: newlib/libc/machine/nios2/configure.in
diff -N newlib/libc/machine/nios2/configure.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ newlib/libc/machine/nios2/configure.in 5 May 2013 22:23:10 -0000
@@ -0,0 +1,14 @@
+dnl This is the newlib/libc/machine/nios2 configure.in file.
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT([newlib],[NEWLIB_VERSION])
+AC_CONFIG_SRCDIR([setjmp.s])
+
+dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
+AC_CONFIG_AUX_DIR(../../../..)
+
+NEWLIB_CONFIGURE(../../..)
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
Index: newlib/libc/machine/nios2/setjmp.s
===================================================================
RCS file: newlib/libc/machine/nios2/setjmp.s
diff -N newlib/libc/machine/nios2/setjmp.s
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ newlib/libc/machine/nios2/setjmp.s 5 May 2013 22:23:10 -0000
@@ -0,0 +1,82 @@
+;/*
+; * C library -- _setjmp, _longjmp
+; *
+; * _longjmp(a,v)
+; * will generate a "return(v?v:1)" from
+; * the last call to
+; * _setjmp(a)
+; * by unwinding the call stack.
+; * The previous signal state is NOT restored.
+; *
+; *
+; * Copyright (c) 2003 Altera Corporation
+; * All rights reserved.
+; *
+; * Redistribution and use in source and binary forms, with or without
+; * modification, are permitted provided that the following conditions
+; * are met:
+; *
+; * o Redistributions of source code must retain the above copyright
+; * notice, this list of conditions and the following disclaimer.
+; * o 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.
+; * o Neither the name of Altera Corporation nor the names of its
+; * contributors may be used to endorse or promote products derived from
+; * this software without specific prior written permission.
+; *
+; * THIS SOFTWARE IS PROVIDED BY ALTERA CORPORATION, THE COPYRIGHT HOLDER,
+; * AND ITS 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 COPYRIGHT HOLDER 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.
+; */
+
+ .section .text
+ .align 3
+ .globl setjmp
+ .type setjmp,@function
+ .globl longjmp
+ .type longjmp,@function
+
+
+setjmp:
+ stw r16, 0(r4)
+ stw r17, 4(r4)
+ stw r18, 8(r4)
+ stw r19, 12(r4)
+ stw r20, 16(r4)
+ stw r21, 20(r4)
+ stw r22, 24(r4)
+ stw r23, 28(r4)
+ stw gp, 32(r4)
+ stw sp, 36(r4)
+ stw fp, 40(r4)
+ stw ra, 44(r4)
+ mov r2, zero
+ ret
+
+longjmp:
+ ldw r16, 0(r4)
+ ldw r17, 4(r4)
+ ldw r18, 8(r4)
+ ldw r19, 12(r4)
+ ldw r20, 16(r4)
+ ldw r21, 20(r4)
+ ldw r22, 24(r4)
+ ldw r23, 28(r4)
+ ldw gp, 32(r4)
+ ldw sp, 36(r4)
+ ldw fp, 40(r4)
+ ldw ra, 44(r4)
+ mov r2, r5
+ bne r2, zero, 1f
+ movi r2, 1
+1:
+ ret