This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Add Blackfin support in newlib (try 2)


Hi all,

I'm going to answer all of your emails in one instead of one for each.:-)
If there are anythings I forgot to reply, please raise it up again.

This is a (partially) revised patch, not all of your comments get
addressed in this one. Since I cannot access to my computer during this
weekend, I'd like to send out my partial work for further comments. I'll
finally address all of your comments and suggestions.

These two issues have been fixed in this patch:

* License for new created files has been changed to a BSD-like one.


Jeff Johnston wrote:
  First, please put the syscalls and crt0.S into libgloss instead of
newlib/libc/sys/bfin.  New ports no longer put syscall and startup files
in libc/sys.  Using libgloss allows you flexibility in the future to add
additional bsp libraries (e.g. simulator vs real processor).

Done.


These issues have not been addressed, either since my lack of knowledge or time.

Jeff Johnston wrote:
  For your libc/machine/bfin Makefile.am, please look at the
libc/machine/fr30 directory.  You should base your Makefile.am on that
(adding any other files to lib_a_SOURCES).  This sets some flags needed
to ensure compilation flags are passed properly down from the top-level.

Compared with fr30, bfin has lib_a_SOURCES, bug lack of AM_CCASFLAGS,
lib_a_CCASFLAGS and lib_a_CFLAGS. I ever added them, but I encountered
some difficulty in generating Makefile.in. I cannot reproduce them since
I have not automake 1.9.5 on my notebook.


Jeff Johnston wrote:
  I forgot another issue.  The bfin processor should be using
underscored cpu macros from the compiler.  That is, you should be
looking for __BFIN__ or __bfin__ inside newlib header files: not "BFIN"
or "bfin".  The latter two are in the user's namespace.

Michael Ambrus wrote:

- The usage of the predefined BFIN macro in machine/ieeefp.h will lead to the same compiling issues as mentioned in: http://sourceware.org/ml/newlib/2006/msg00787.html http://sourceware.org/ml/newlib/2006/msg00791.html

As for these two macros, they were in our CVS(*) long long ago. I admit they look weird and uncommon. But considering they have been used in many code in such long time, we have to estimate its impact before doing any change.

Currently, it works properly for building newlib in gcc source code tree
on all Suse hosts we are using (9.2, 10.1, and maybe some others) and
Debian amd64 testing and Ubuntu dapper and edgy. I never observed that
issue. Maybe because I never build newlib outside of gcc source tree.

I'll investigate this issue further next week.


Michael Ambrus wrote:

- Both setjmp and longjmp are lacking (or according to the current gcc release, it's rather _setjmp and _longjmp). If your application or Newlib (or other libraries) don't need them, the build will pass however.

- The implementation of ___sigsetjmp is not needed. If I'm not
mistaken, sigsetjmp and siglongjmp are wrapped around setjmp and
longjmp macros in machine/setjmp.h.

I have not looked this. I'll do it next week.



Thanks, Jie

* Our CVS is located at  <http://blackfin.uclinux.org/>.
A lot of projects are hosted there, include toolchain, uClinux, jtagtools,
hardware design, wiki form documents and many others.
	toplevel/
	* configure.in: Remove target-libgloss from noconfigdirs for
	bfin-*-*.

	libgloss/
	* bfin/aclocal.m4: Generate.
	* bfin/configure.in: New.
	* bfin/configure: Generate.
	* bfin/crt0.S: New.
	* bfin/Makefile.in: New.
	* bfin/syscalls.c: New.
	* configure.in: Add support for bfin-*-*.
	* configure: Regenerate.

	newlib/
	* configure.host: Add support for bfin.
	* libc/include/machine/ieeefp.h: Define __IEEE_LITTLE_ENDIAN for bfin.
	* libc/include/machine/setjmp.h: Define _JBLEN for bfin.
	* libc/machine/bfin/access.c: New.
	* libc/machine/bfin/aclocal.m4: Generate.
	* libc/machine/bfin/configure.in: New.
	* libc/machine/bfin/configure: Generate.
	* libc/machine/bfin/Makefile.am: New.
	* libc/machine/bfin/Makefile.in: Generate.
	* libc/machine/bfin/setjmp.S: New.
	* libc/machine/bfin/sys/syscall.h: New.
	* libc/machine/configure.in: Add bfin support.
	* libc/machine/configure: Generate.

diff -u -r -N -p newlib-orig/src/configure.in newlib/src/configure.in
--- newlib-orig/src/configure.in	2006-10-11 00:50:34.000000000 +0800
+++ newlib/src/configure.in	2006-10-20 14:34:11.000000000 +0800
@@ -507,7 +507,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
     ;;
   bfin-*-*)
-    noconfigdirs="$noconfigdirs target-libgloss gdb"
+    noconfigdirs="$noconfigdirs gdb"
     if test x${is_cross_compiler} != xno ; then
       target_configdirs="${target_configdirs} target-bsp target-cygmon"
     fi
diff -u -r -N -p newlib-orig/src/libgloss/bfin/configure.in newlib/src/libgloss/bfin/configure.in
--- newlib-orig/src/libgloss/bfin/configure.in	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/libgloss/bfin/configure.in	2006-10-20 22:52:36.000000000 +0800
@@ -0,0 +1,54 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.59)
+AC_INIT(crt0.S)
+
+if test "${enable_shared}" = "yes" ; then
+    echo "Shared libraries not supported for cross compiling, ignored"
+fi
+
+if test "$srcdir" = "." ; then
+  if test "${with_target_subdir}" != "." ; then
+    libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
+  else
+    libgloss_topdir="${srcdir}/${with_multisrctop}../.."
+  fi
+else
+  libgloss_topdir="${srcdir}/../.."
+fi
+AC_CONFIG_AUX_DIR($libgloss_topdir)
+
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+
+AC_PROG_INSTALL
+
+LIB_AC_PROG_CC
+AS=${AS-as}
+AC_SUBST(AS)
+AR=${AR-ar}
+AC_SUBST(AR)
+LD=${LD-ld}
+AC_SUBST(LD)
+AC_PROG_RANLIB
+LIB_AM_PROG_AS
+
+host_makefile_frag=${srcdir}/../config/default.mh
+
+dnl We have to assign the same value to other variables because autoconf
+dnl doesn't provide a mechanism to substitute a replacement keyword with
+dnl arbitrary data or pathnames.
+dnl
+host_makefile_frag_path=$host_makefile_frag
+AC_SUBST(host_makefile_frag_path)
+AC_SUBST_FILE(host_makefile_frag)
+
+AC_CONFIG_FILES(Makefile,
+. ${libgloss_topdir}/config-ml.in,
+srcdir=${srcdir}
+target=${target}
+with_multisubdir=${with_multisubdir}
+ac_configure_args="${ac_configure_args} --enable-multilib"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+libgloss_topdir=${libgloss_topdir}
+)
+AC_OUTPUT
diff -u -r -N -p newlib-orig/src/libgloss/bfin/crt0.S newlib/src/libgloss/bfin/crt0.S
--- newlib-orig/src/libgloss/bfin/crt0.S	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/libgloss/bfin/crt0.S	2006-10-21 01:05:50.000000000 +0800
@@ -0,0 +1,72 @@
+/*
+ * crt0.S for the Blackfin processor
+ *
+ * Copyright (C) 2006 Analog Devices, Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+	.text
+	.align 	2
+
+	.global	__start
+__start:
+
+	/* Start by setting up a stack */
+	link 0xc;
+	/* Zero the memory in the .bss section.  */
+
+	p0.l = __edata;
+	p0.h = __edata;
+	p1.l = __end;
+	p1.h = __end;
+	p1 -= p0;
+	r0 = 0;
+	lsetup (L$L$clear_bss, L$L$clear_bss) lc0 = p1;
+L$L$clear_bss:
+	B [p0++] = r0;
+
+#ifdef __BFIN_FDPIC__
+	/* Set up GOT pointer.  */
+	P0.L = __ROFIXUP_END__;
+	P0.H = __ROFIXUP_END__;
+	P4 = [P0 - 4];
+#endif
+
+	/* Need to set up standard file handles */
+	/*  Parse string at r1 */
+
+	p0.l = __init;
+	p0.h = __init; 
+	P3 = P4; 
+	call	(p0)
+
+	p0.l = _atexit;
+	p0.h = _atexit;
+#ifdef __BFIN_FDPIC__
+	r0 = [P4 + __fini@FUNCDESC_GOT17M4]  ; 
+	P3 = P4; 
+#else
+	r0.l = __fini;
+	r0.h = __fini;
+#endif
+	call	(p0)
+
+	p0.l = ___setup_argv_and_call_main;
+	p0.h = ___setup_argv_and_call_main; 
+	P3 = P4; 
+	call	(p0)
+
+	p0.l = _exit;
+	p0.h = _exit; 
+	P3 = P4; 
+	jump	(p0)		/* Should not return.  */
+	nop;
diff -u -r -N -p newlib-orig/src/libgloss/bfin/Makefile.in newlib/src/libgloss/bfin/Makefile.in
--- newlib-orig/src/libgloss/bfin/Makefile.in	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/libgloss/bfin/Makefile.in	2006-10-20 23:22:07.000000000 +0800
@@ -0,0 +1,102 @@
+#
+#
+
+DESTDIR =
+VPATH = @srcdir@ @srcdir@/..
+srcdir = @srcdir@
+objdir = .
+srcroot = $(srcdir)/../..
+objroot = $(objdir)/../..
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+host_alias = @host_alias@
+target_alias = @target_alias@
+
+bindir = @bindir@
+libdir = @libdir@
+tooldir = $(exec_prefix)/$(target_alias)
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+
+# Multilib support variables.
+# TOP is used instead of MULTI{BUILD,SRC}TOP.
+MULTIDIRS =
+MULTISUBDIR =
+
+SHELL =	/bin/sh
+
+CC = @CC@
+
+AS = @AS@
+AR = @AR@
+LD = @LD@
+RANLIB = @RANLIB@
+
+OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
+	then echo ${objroot}/../binutils/objdump ; \
+	else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
+OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
+	then echo ${objroot}/../binutils/objcopy ; \
+	else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
+
+OBJS		=
+CFLAGS		=
+SCRIPTS		=
+
+# Here is all of the simulator stuff
+SIM_SCRIPTS	=
+SIM_LDFLAGS	=
+SIM_BSP		= libsim.a
+SIM_CRT0	= crt0.o
+SIM_OBJS	= syscalls.o
+SIM_TEST	= sim-test
+SIM_INSTALL	= install-sim
+
+# Host specific makefile fragment comes in here.
+@host_makefile_frag@
+
+#
+# build a test program for each target board. Just trying to get
+# it to link is a good test, so we ignore all the errors for now.
+#
+all: ${SIM_CRT0} ${SIM_BSP}
+
+#
+# here's where we build the board support packages for each target
+#
+${SIM_BSP}: ${OBJS} ${SIM_OBJS}
+	${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS}
+	${RANLIB} ${SIM_BSP}
+
+#
+#
+#
+.c.S:
+	${CC} ${CFLAGS_FOR_TARGET} -c $<
+
+clean mostlyclean:
+	rm -f a.out core *.i *.o $(SIM_BSP)
+
+distclean maintainer-clean realclean: clean
+	rm -f Makefile config.status *~
+
+.PHONY: install info install-info clean-info
+install: ${SIM_INSTALL}
+
+install-sim:
+	set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
+
+doc:
+info:
+install-info:
+clean-info:
+
+Makefile: Makefile.in config.status @host_makefile_frag_path@
+	$(SHELL) config.status
+
+config.status: configure
+	$(SHELL) config.status --recheck
diff -u -r -N -p newlib-orig/src/libgloss/bfin/syscalls.c newlib/src/libgloss/bfin/syscalls.c
--- newlib-orig/src/libgloss/bfin/syscalls.c	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/libgloss/bfin/syscalls.c	2006-10-21 01:06:55.000000000 +0800
@@ -0,0 +1,264 @@
+/*
+ * C library support files for the Blackfin processor
+ *
+ * Copyright (C) 2006 Analog Devices, Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+#include <_ansi.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/times.h>
+#include "sys/syscall.h"
+#include <errno.h>
+#include <reent.h>
+#include <unistd.h>
+
+register char *stack_ptr asm ("SP");
+
+static inline int
+do_syscall (int reason, void *arg)
+{
+  int result;
+  asm volatile ("[--sp] = %1; [--sp] = %2; \
+		r1 = [sp++]; r0 = [sp++]; \
+		raise 0; %0 = r0;"
+		: "=r" (result)
+		: "r" (reason), "r" (arg)
+		: "R0", "R1", "memory", "cc");
+  return result;
+}
+
+int
+_read (int file, char *ptr, int len)
+{
+  int block[3];
+
+  block[0] = file;
+  block[1] = (int) ptr;
+  block[2] = len;
+  
+  return do_syscall (SYS_read, block);
+}
+
+int
+_lseek (int file, int ptr, int dir)
+{
+  int block[2];
+
+  block[0] = file;
+  block[1] = ptr;
+
+  return do_syscall (SYS_lseek, block);
+}
+
+int
+_write (int file, char *ptr, int len)
+{
+  int block[3];
+  
+  block[0] = file;
+  block[1] = (int) ptr;
+  block[2] = len;
+  
+  return do_syscall (SYS_write, block);
+}
+
+int
+_open (const char *path, int flags)
+{
+  int block[2];
+
+  block[0] = (int) path;
+  block[1] = flags;
+
+  return do_syscall (SYS_open, block);
+}
+
+int
+_close (int file)
+{
+  return do_syscall (SYS_close, &file);
+}
+
+void
+_exit (int n)
+{
+  do_syscall (SYS_exit, &n);
+}
+
+int
+_kill (int n, int m)
+{
+  int block[2];
+
+  block[0] = n;
+  block[1] = m;
+
+  return do_syscall (SYS_kill, block);
+}
+
+int
+_getpid (int n)
+{
+  return 1;
+}
+
+caddr_t
+_sbrk (int incr)
+{
+  extern char end;		/* Defined by the linker.  */
+  static char *heap_end;
+  char *prev_heap_end;
+
+  if (heap_end == NULL)
+    heap_end = &end;
+  
+  prev_heap_end = heap_end;
+  
+  if (heap_end + incr > stack_ptr)
+    {
+      /* Some of the libstdc++-v3 tests rely upon detecting
+	 out of memory errors, so do not abort here.  */
+#if 0
+      extern void abort (void);
+
+      _write (1, "_sbrk: Heap and stack collision\n", 32);
+      
+      abort ();
+#else
+      errno = ENOMEM;
+      return (caddr_t) -1;
+#endif
+    }
+  
+  heap_end += incr;
+
+  return (caddr_t) prev_heap_end;
+}
+
+extern void memset (struct stat *, int, unsigned int);
+
+int
+_fstat (int file, struct stat * st)
+{
+  memset (st, 0, sizeof (* st));
+  st->st_mode = S_IFCHR;
+  st->st_blksize = 1024;
+  return 0;
+}
+
+int _stat (const char *fname, struct stat *st)
+{
+  int file;
+
+  /* The best we can do is try to open the file readonly.  If it exists,
+     then we can guess a few things about it.  */
+  if ((file = _open (fname, O_RDONLY)) < 0)
+    return -1;
+
+  memset (st, 0, sizeof (* st));
+  st->st_mode = S_IFREG | S_IREAD;
+  st->st_blksize = 1024;
+  _close (file); /* Not interested in the error.  */
+  return 0;
+}
+
+int
+_link (void)
+{
+  return -1;
+}
+
+int
+_unlink (void)
+{
+  return -1;
+}
+
+void
+_raise (void)
+{
+  return;
+}
+
+int
+_gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+  tv->tv_usec = 0;
+  tv->tv_sec = do_syscall (SYS_time, 0);
+  return 0;
+}
+
+/* Return a clock that ticks at 100Hz.  */
+clock_t 
+_times (struct tms * tp)
+{
+  return -1;
+}
+
+int
+isatty (int fd)
+{
+  return 1;
+}
+
+int
+_system (const char *s)
+{
+  if (s == NULL)
+    return 0;
+  errno = ENOSYS;
+  return -1;
+}
+
+int
+_rename (const char * oldpath, const char * newpath)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+static inline int
+__setup_argv_for_main (int argc)
+{
+  int block[2];
+  char **argv;
+  int i = argc;
+
+  argv = __builtin_alloca ((1 + argc) * sizeof (*argv));
+
+  argv[i] = NULL;
+  while (i--) {
+    block[0] = i;
+    argv[i] = __builtin_alloca (1 + do_syscall (SYS_argnlen, (void *)block));
+    block[1] = (int) argv[i];
+    do_syscall (SYS_argn, (void *)block);
+  }
+
+  return main (argc, argv);
+}
+
+int
+__setup_argv_and_call_main ()
+{
+  int argc = do_syscall (SYS_argc, 0);
+
+  if (argc <= 0)
+    return main (argc, NULL);
+  else
+    return __setup_argv_for_main (argc);
+}
diff -u -r -N -p newlib-orig/src/libgloss/configure.in newlib/src/libgloss/configure.in
--- newlib-orig/src/libgloss/configure.in	2006-10-11 00:50:02.000000000 +0800
+++ newlib/src/libgloss/configure.in	2006-10-20 14:29:00.000000000 +0800
@@ -77,6 +77,10 @@ case "${target}" in
 	AC_CONFIG_SUBDIRS(mn10300)
 	config_testsuite = true;
 	;;
+  bfin-*-*)
+	AC_CONFIG_SUBDIRS(bfin)
+	config_testsuite = true;
+	;;
   cris-*-* | crisv32-*-*)
 	AC_CONFIG_SUBDIRS(cris)
 	config_testsuite = true;
diff -u -r -N -p newlib-orig/src/newlib/configure.host newlib/src/newlib/configure.host
--- newlib-orig/src/newlib/configure.host	2006-10-11 00:50:06.000000000 +0800
+++ newlib/src/newlib/configure.host	2006-10-20 14:50:52.000000000 +0800
@@ -99,6 +99,9 @@ case "${host_cpu}" in
   avr*)
 	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -mcall-prologues"
 	;;
+  bfin)
+	machine_dir=bfin
+	;;
   cris | crisv32)
 	machine_dir=cris
 	;;
@@ -334,6 +337,9 @@ case "${host}" in
 	  have_crt0="no"
 	fi
 	;;
+  bfin-*-*)
+	sys_dir=
+	;;
   crx*)
 	sys_dir=
 	;;
@@ -539,6 +545,9 @@ case "${host}" in
   avr*)
 	newlib_cflags="${newlib_cflags} -DNO_EXEC -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
 	;;
+  bfin*)
+	syscall_dir=syscalls
+	;;
   cris-*-* | crisv32-*-*)
 	default_newlib_io_long_long="yes"
 	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -D_USE_WRITE -DCOMPACT_CTYPE"
diff -u -r -N -p newlib-orig/src/newlib/libc/include/machine/ieeefp.h newlib/src/newlib/libc/include/machine/ieeefp.h
--- newlib-orig/src/newlib/libc/include/machine/ieeefp.h	2006-10-11 00:50:07.000000000 +0800
+++ newlib/src/newlib/libc/include/machine/ieeefp.h	2006-10-11 01:25:19.000000000 +0800
@@ -283,6 +283,10 @@
 #define __IEEE_LITTLE_ENDIAN
 #endif
 
+#ifdef BFIN
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
 #ifndef __IEEE_BIG_ENDIAN
 #ifndef __IEEE_LITTLE_ENDIAN
 #error Endianess not declared!!
diff -u -r -N -p newlib-orig/src/newlib/libc/include/machine/setjmp.h newlib/src/newlib/libc/include/machine/setjmp.h
--- newlib-orig/src/newlib/libc/include/machine/setjmp.h	2006-10-11 00:50:07.000000000 +0800
+++ newlib/src/newlib/libc/include/machine/setjmp.h	2006-10-11 01:25:19.000000000 +0800
@@ -21,6 +21,10 @@ _BEGIN_STD_C
 #define	_JBLEN	13
 #endif
 
+#ifdef bfin
+#define _JBLEN  40
+#endif
+
 /* necv70 was 9 as well. */
 
 #ifdef __mc68000__
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/bfin/access.c newlib/src/newlib/libc/machine/bfin/access.c
--- newlib-orig/src/newlib/libc/machine/bfin/access.c	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/machine/bfin/access.c	2006-10-11 01:25:19.000000000 +0800
@@ -0,0 +1,33 @@
+/* This is file ACCESS.C */
+/*
+ * Copyright (C) 1993 DJ Delorie
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms is permitted
+ * provided that the above copyright notice and following paragraph are
+ * duplicated in all such forms.
+ *
+ * This file is distributed WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+int access(const char *fn, int flags)
+{
+  struct stat s;
+  if (stat(fn, &s))
+    return -1;
+  if (s.st_mode & S_IFDIR)
+    return 0;
+  if (flags & W_OK)
+  {
+    if (s.st_mode & S_IWRITE)
+      return 0;
+    return -1;
+  }
+  return 0;
+}
+	
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/bfin/configure.in newlib/src/newlib/libc/machine/bfin/configure.in
--- newlib-orig/src/newlib/libc/machine/bfin/configure.in	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/machine/bfin/configure.in	2006-10-11 12:08:03.000000000 +0800
@@ -0,0 +1,14 @@
+dnl This is the newlib/libc/machine/bfin 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([Makefile.am])
+
+dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake. 
+AC_CONFIG_AUX_DIR(../../../..)
+
+NEWLIB_CONFIGURE(../../..)
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/bfin/Makefile.am newlib/src/newlib/libc/machine/bfin/Makefile.am
--- newlib-orig/src/newlib/libc/machine/bfin/Makefile.am	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/machine/bfin/Makefile.am	2006-10-19 09:17:54.000000000 +0800
@@ -0,0 +1,12 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = setjmp.S access.c
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/bfin/setjmp.S newlib/src/newlib/libc/machine/bfin/setjmp.S
--- newlib-orig/src/newlib/libc/machine/bfin/setjmp.S	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/machine/bfin/setjmp.S	2006-10-21 01:07:49.000000000 +0800
@@ -0,0 +1,110 @@
+/*
+ * Setjmp for the Blackfin processor
+ *
+ * Copyright (C) 2006 Analog Devices, Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+
+#define _ASM
+#define _SETJMP_H
+
+.globl ___sigsetjmp;
+.align 4;
+
+___sigsetjmp:
+	[--SP] = P0;		/* Save P0 */
+	P0 = R0;
+	R0 = [SP++];	
+	[P0 + 0x00] = R0;	/* Save saved P0 */
+	[P0 + 0x04] = P1;
+	[P0 + 0x08] = P2;
+	[P0 + 0x0C] = P3;
+	[P0 + 0x10] = P4;
+	[P0 + 0x14] = P5;
+
+	[P0 + 0x18] = FP;	/* Frame Pointer */
+	[P0 + 0x1C] = SP;	/* Stack Pointer */
+
+	[P0 + 0x20] = P0;	/* Data Registers */
+	[P0 + 0x24] = R1;
+	[P0 + 0x28] = R2;
+	[P0 + 0x2C] = R3;
+	[P0 + 0x30] = R4;
+	[P0 + 0x34] = R5;
+	[P0 + 0x38] = R6;
+	[P0 + 0x3C] = R7;
+
+	R0 = ASTAT;
+	[P0 + 0x40] = R0;
+
+	R0 = LC0;		/* Loop Counters */
+	[P0 + 0x44] = R0;
+	R0 = LC1;
+	[P0 + 0x48] = R0;
+
+	R0 = A0.W;		/* Accumulators */
+	[P0 + 0x4C] = R0;
+	R0 = A0.X;
+	[P0 + 0x50] = R0;
+	R0 = A1.W;
+	[P0 + 0x54] = R0;
+	R0 = A1.X;
+	[P0 + 0x58] = R0;
+
+	R0 = I0;		/* Index Registers */
+	[P0 + 0x5C] = R0;
+	R0 = I1;
+	[P0 + 0x60] = R0;
+	R0 = I2;
+	[P0 + 0x64] = R0;
+	R0 = I3;
+	[P0 + 0x68] = R0;
+
+	R0 = M0;		/* Modifier Registers */
+	[P0 + 0x6C] = R0;
+	R0 = M1;
+	[P0 + 0x70] = R0;
+	R0 = M2;
+	[P0 + 0x74] = R0;
+	R0 = M3;
+	[P0 + 0x78] = R0;
+
+	R0 = L0;		/* Length Registers */
+	[P0 + 0x7c] = R0;
+	R0 = L1;
+	[P0 + 0x80] = R0;
+	R0 = L2;
+	[P0 + 0x84] = R0;
+	R0 = L3;
+	[P0 + 0x88] = R0;
+
+	R0 = B0;		/* Base Registers */
+	[P0 + 0x8C] = R0;
+	R0 = B1;
+	[P0 + 0x90] = R0;
+	R0 = B2;
+	[P0 + 0x94] = R0;
+	R0 = B3;
+	[P0 + 0x98] = R0;
+
+	R0 = RETS;
+	[P0 + 0x9C] = R0;
+
+	R0 = [P0 + 0x20];
+	CC = R1 == 1;
+	IF CC JUMP L$L$finished;
+	CALL ___sigjmp_save; 
+L$L$finished:
+	R0 = 0;
+	RTS;
+___sigsetjmp.end:
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/bfin/sys/syscall.h newlib/src/newlib/libc/machine/bfin/sys/syscall.h
--- newlib-orig/src/newlib/libc/machine/bfin/sys/syscall.h	1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/machine/bfin/sys/syscall.h	2006-10-21 01:08:28.000000000 +0800
@@ -0,0 +1,56 @@
+/*
+ * System call number for the Blackfin processor
+ *
+ * Copyright (C) 2006 Analog Devices, Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+
+#define SYS_exit	1
+#define SYS_fork	2
+#define SYS_read	3
+#define SYS_write	4
+#define SYS_open	5
+#define SYS_close	6
+#define SYS_wait4	7
+#define SYS_creat	8
+#define SYS_link	9
+#define SYS_unlink	10
+#define SYS_execv	11
+#define SYS_chdir	12
+
+#define SYS_mknod	14
+#define SYS_chmod	15
+#define SYS_chown	16
+
+#define SYS_lseek	19
+#define SYS_getpid	20
+#define SYS_isatty	21
+#define SYS_fstat	22
+#define SYS_time	23
+#define SYS_kill	24
+
+#define SYS_stat	38
+
+#define SYS_pipe	42
+
+#define SYS_execve	59
+
+#define SYS_truncate	129
+#define SYS_ftruncate	130
+
+#define SYS_argc	172
+#define SYS_argnlen	173
+#define SYS_argn	174
+
+#define SYS_utime	201
+#define SYS_wait	202
diff -u -r -N -p newlib-orig/src/newlib/libc/machine/configure.in newlib/src/newlib/libc/machine/configure.in
--- newlib-orig/src/newlib/libc/machine/configure.in	2006-10-11 00:50:07.000000000 +0800
+++ newlib/src/newlib/libc/machine/configure.in	2006-10-11 14:07:56.000000000 +0800
@@ -24,6 +24,7 @@ if test -n "${machine_dir}"; then
   case ${machine_dir} in
 	a29k) AC_CONFIG_SUBDIRS(a29k) ;;
 	arm) AC_CONFIG_SUBDIRS(arm) ;;
+	bfin) AC_CONFIG_SUBDIRS(bfin) ;;
 	cris) AC_CONFIG_SUBDIRS(cris) ;;
 	crx) AC_CONFIG_SUBDIRS(crx) ;;
 	d10v) AC_CONFIG_SUBDIRS(d10v) ;;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]