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]

Re: [PATCH] Add Blackfin support in newlib


Hello Jie,

Looks good, but I have a couple of issues.

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).

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.

-- Jeff J.

Jie Zhang wrote:
Hi,

We (Analog Devices, Inc.) have ported newlib to Blackfin processor and
would like to contribute back. We ported newlib mainly for testing Blackfin GCC/Binutils/GDB on simulator. We have contributed Blackfin port GCC and binutils to their respective projects. Contributing Blackfin GDB to FSF is going on.


This new port is being used in our daily toolchain testing on simulator. The results seem OK.

Is this port in a good shape to be accepted? Any comments are appreciated.

Thanks,
Jie Zhang


------------------------------------------------------------------------



* configure.host: Add bfin support. * 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/configure.in: Add bfin support. * libc/sys/bfin/aclocal.m4: Generate. * libc/sys/bfin/configure.in: New. * libc/sys/bfin/configure: Generate. * libc/sys/bfin/crt0.S: New. * libc/sys/bfin/Makefile.am: New. * libc/sys/bfin/Makefile.in: Generate. * libc/sys/bfin/sys/syscall.h: New. * libc/sys/bfin/sys/syscalls.c: New. * libc/sys/configure.in: Add bfin support. * libc/sys/configure: Generate.

diff -r -u -p -N -x CVS 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-11 01:25:19.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=bfin
+ ;;
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 -r -u -p -N -x CVS 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 -r -u -p -N -x CVS 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 -r -u -p -N -x CVS 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 -r -u -p -N -x CVS 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 -r -u -p -N -x CVS 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 -r -u -p -N -x CVS 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-19 09:27:21.000000000 +0800
@@ -0,0 +1,106 @@
+/* Setjmp for the Blackfin processor
+ Copyright (C) 2006 Analog Devices, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details. */
+
+#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 -r -u -p -N -x CVS 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) ;;
diff -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/bfin/configure.in newlib/src/newlib/libc/sys/bfin/configure.in
--- newlib-orig/src/newlib/libc/sys/bfin/configure.in 1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/sys/bfin/configure.in 2006-10-11 01:39:00.000000000 +0800
@@ -0,0 +1,14 @@
+dnl This is the newlib/libc/sys/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([syscalls.c])
+
+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 -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/bfin/crt0.S newlib/src/newlib/libc/sys/bfin/crt0.S
--- newlib-orig/src/newlib/libc/sys/bfin/crt0.S 1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/sys/bfin/crt0.S 2006-10-19 09:28:34.000000000 +0800
@@ -0,0 +1,69 @@
+/* Crt0.S for the Blackfin processor
+ Copyright (C) 2006 Analog Devices, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details. */
+
+ .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 -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/bfin/Makefile.am newlib/src/newlib/libc/sys/bfin/Makefile.am
--- newlib-orig/src/newlib/libc/sys/bfin/Makefile.am 1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/sys/bfin/Makefile.am 2006-10-19 09:32:56.000000000 +0800
@@ -0,0 +1,14 @@
+## 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 = crt0.S syscalls.c
+
+all: crt0.o
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/bfin/sys/syscall.h newlib/src/newlib/libc/sys/bfin/sys/syscall.h
--- newlib-orig/src/newlib/libc/sys/bfin/sys/syscall.h 1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/sys/bfin/sys/syscall.h 2006-10-19 09:37:10.000000000 +0800
@@ -0,0 +1,52 @@
+/* System call number for the Blackfin processor
+ Copyright (C) 2006 Analog Devices, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details. */
+
+#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 -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/bfin/syscalls.c newlib/src/newlib/libc/sys/bfin/syscalls.c
--- newlib-orig/src/newlib/libc/sys/bfin/syscalls.c 1970-01-01 08:00:00.000000000 +0800
+++ newlib/src/newlib/libc/sys/bfin/syscalls.c 2006-10-19 09:35:48.000000000 +0800
@@ -0,0 +1,261 @@
+/* C library support files for the Blackfin processor
+ Copyright (C) 2006 Analog Devices, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details. */
+
+#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 -r -u -p -N -x CVS newlib-orig/src/newlib/libc/sys/configure.in newlib/src/newlib/libc/sys/configure.in
--- newlib-orig/src/newlib/libc/sys/configure.in 2006-10-11 00:50:16.000000000 +0800
+++ newlib/src/newlib/libc/sys/configure.in 2006-10-11 14:06:36.000000000 +0800
@@ -23,6 +23,7 @@ if test -n "${sys_dir}"; then
a29khif) AC_CONFIG_SUBDIRS(a29khif) ;;
arc) AC_CONFIG_SUBDIRS(arc) ;;
arm) AC_CONFIG_SUBDIRS(arm) ;;
+ bfin) AC_CONFIG_SUBDIRS(bfin) ;;
d10v) AC_CONFIG_SUBDIRS(d10v) ;;
decstation) AC_CONFIG_SUBDIRS(decstation) ;;
h8300hms) AC_CONFIG_SUBDIRS(h8300hms) ;;


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