Initial revision

This commit is contained in:
Roland McGrath 1994-08-26 06:15:17 +00:00
parent a1106e3b5e
commit 11ab92947e
12 changed files with 601 additions and 0 deletions

54
bare/Makefile Normal file
View File

@ -0,0 +1,54 @@
# Copyright (C) 1994 Free Software Foundation, Inc.
# Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
# On-Line Applications Research Corporation.
#
# This file is part of the GNU C Library.
#
# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# The GNU C Library 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with the GNU C Library; see the file COPYING.LIB. If
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
# Cambridge, MA 02139, USA.
subdir := bare
bare-routines := brdinit console strtsupp
extra-objs = $(bare-routines:%=%.o)
distribute = $(bare-routines:%=%.c)
install-lib = lib$(config-vendor).a
include ../Rules
#
# For bare targets, the $(config-vendor) is the name of the board.
# We will place the board dependent code ONLY in a library which
# is board dependent. This way many target boards can share a
# single libc.a. To resolve all symbols and successfully link
# a program, the application must link against libc.a and libMY_TARGET.a.
# For example, the target specific library for the Motorola MVME135
# board will be named libmvme135.a. To link a program for the
# MVME135, one must link against -lc and -lmvme135.
#
lib: $(objpfx)lib$(config-vendor).a
$(objpfx)lib$(config-vendor).a: $(bare-routines:%=$(objpfx)%.o)
# This library is small enough that it's simplest to recreate the archive
# from scratch each time.
rm -f $@
ifdef objdir
cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
else
$(AR) cq$(verbose) $@ $^
endif
$(RANLIB) $@

2
sysdeps/i960/Implies Normal file
View File

@ -0,0 +1,2 @@
# i960 family uses IEEE 754 floating point.
ieee754

43
sysdeps/i960/ffs.c Normal file
View File

@ -0,0 +1,43 @@
/* ffs -- find first set bit in a word, counted from least significant end.
For i960 Core architecture
Copyright (C) 1994 Free Software Foundation, Inc.
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
On-Line Applications Research Corporation.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <string.h>
#undef ffs
#if defined (__GNUC__) && defined (__i960__)
int
DEFUN(ffs, (x), int x)
{
int cnt;
asm("scanbit %1,%0" : "=d" (cnt) : "rm" (x & -x));
return cnt;
}
#else
#include <sysdeps/generic/ffs.c>
#endif

View File

@ -0,0 +1,4 @@
# The `bare' subdirectory defines some structure for a target-specific
# library of functions which are actually implemented in
# sysdeps/standalone/CPU/TARGET.
bare

68
sysdeps/standalone/brk.c Normal file
View File

@ -0,0 +1,68 @@
/* Copyright (C) 1991, 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <stdlib.h>
PTR __curbrk;
PTR __rorig;
PTR __rlimit;
int
DEFUN(__brk, (inaddr), PTR inaddr)
{
if ( ( (void *)inaddr > (void *)__rlimit ) ||
( (void *)inaddr < (void *)__rorig ) )
return -1;
__curbrk = inaddr;
return 0;
}
/* Initialization Code for Memory Allocation */
PTR __C_heap_start;
int __C_heap_size;
#ifdef HAVE_GNU_LD
static
#endif
void
DEFUN(__NONE_set_memvals, (argc, argv, envp),
int argc AND char **argv AND char **envp)
{
__rorig =
__curbrk = __C_heap_start;
__rlimit = __curbrk + __C_heap_size;
(void) &__NONE_set_memvals; /* Avoid "defined but not used" warning. */
}
#ifdef HAVE_GNU_LD
#include <gnu-stabs.h>
text_set_element (__libc_subinit, __NONE_set_memvals);
#endif

View File

@ -0,0 +1,42 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <errno.h>
#include <unistd.h>
#include <stdio_lim.h>
#include "filedesc.h"
/* Close the file descriptor FD. */
int
DEFUN(__close, (fd), int fd)
{
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
{
errno = EBADF;
return -1;
}
__FD_Table[ fd ].in_use = 0;
return 0;
}

View File

@ -0,0 +1,48 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
* This is the file descriptor used by the no OS implementation
* of __open, __read, __write, and __close.
*/
#ifndef __FILEDESC_h
#define __FILEDESC_h
#include <stdio_lim.h>
#ifndef __DECLARE_FILE_DESCRIPTORS__
#define FILEDESC_EXTERN extern
#else
#define FILEDESC_EXTERN
#endif
typedef struct {
int in_use; /* 1 if in use, 0 otherwise */
int flags; /* Flags from open */
} __no_os_file_descriptor;
#define __FD_Is_valid( _fd ) \
( (_fd) >= 0 && (_fd) < FOPEN_MAX )
FILEDESC_EXTERN __no_os_file_descriptor __FD_Table[ FOPEN_MAX ];
#endif

124
sysdeps/standalone/open.c Normal file
View File

@ -0,0 +1,124 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdio_lim.h>
#include <unistd.h>
#define __DECLARE_FILE_DESCRIPTORS__
#include "filedesc.h"
/* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
a third argument is the file protection. */
int
DEFUN(__open, (file, oflag), CONST char *file AND int oflag DOTS)
{
int mode;
int newfd;
int index;
if (file == NULL)
{
errno = EINVAL;
return -1;
}
if (oflag & O_CREAT)
{
va_list arg;
va_start(arg, oflag);
mode = va_arg(arg, int);
va_end(arg);
}
/*
* Find an open slot.
*/
newfd = -1;
for ( index=0 ; index< FOPEN_MAX ; index++ )
if ( !__FD_Table[ index ].in_use ) {
newfd = index;
break;
}
if ( newfd == -1 ) {
errno = ENFILE;
return -1;
}
/*
* Initialize the open slot
*/
__FD_Table[ newfd ].in_use = 1;
__FD_Table[ newfd ].flags = oflag;
return newfd;
}
/* Initialization Code for Console I/O */
#ifdef HAVE_GNU_LD
static
#endif
void
DEFUN(__NONE_init_console_io, (argc, argv, envp),
int argc AND char **argv AND char **envp)
{
int index;
for ( index=0 ; index< FOPEN_MAX ; index++ )
__FD_Table[ index ].in_use = 0;
stdin = fopen( "", "r" );
stdout = fopen( "", "w" );
stderr = fopen( "", "w" );
/*
* Line buffer the standard input and output and use no buffering for
* standard error.
*/
setvbuf( stdin, NULL, _IOLBF, BUFSIZ );
setvbuf( stdout, NULL, _IOLBF, BUFSIZ );
setvbuf( stderr, NULL, _IONBF, BUFSIZ );
(void) &__NONE_init_console_io; /* Avoid "defined but not used" warning. */
}
#ifdef HAVE_GNU_LD
#include <gnu-stabs.h>
text_set_element (__libc_subinit, __NONE_init_console_io);
#endif

85
sysdeps/standalone/read.c Normal file
View File

@ -0,0 +1,85 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <errno.h>
#include <unistd.h>
#include <stddef.h>
#include "filedesc.h"
#include <fcntl.h>
#include <standalone.h>
/* Read NBYTES into BUF from FD. Return the number read or -1. */
ssize_t
DEFUN(__read, (fd, buf, nbytes),
int fd AND PTR buf AND size_t nbytes)
{
char *buffer = (char *) buf;
int data;
int poll;
errno = 0;
if (nbytes == 0)
return 0;
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
{
errno = EBADF;
return -1;
}
if (buf == NULL)
{
errno = EINVAL;
return -1;
}
if ( __FD_Table[ fd ].flags & O_WRONLY ) /* is it write only? */
{
errno = EBADF;
return -1;
}
/* If this is a non-blocking fd, then we want to poll the console. */
poll = ( __FD_Table[ fd ].flags & O_NONBLOCK ) ? 1 : 0;
/* Read a single character. This is a cheap way to insure that the
upper layers get every character because _Console_Getc can't timeout
or otherwise know when to stop. */
data = _Console_Getc(poll);
if ( data == -1 ) /* if no data return */
return -1;
(void) _Console_Putc(data); /* echo the character */
if ( data == '\r' ) { /* translate CR -> CR/LF */
(void) _Console_Putc('\n');
data = '\n';
}
*buffer = data;
return 1;
}

View File

@ -0,0 +1,32 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifndef _STANDALONE_H
#define _STANDALONE_H
#include <sys/cdefs.h>
extern void _Board_Initialize __PP ((void));
extern int _Console_Putc __P ((char c));
extern int _Console_Getc __P ((int poll));
#endif

View File

@ -0,0 +1,27 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#define L_tmpnam 1
#define TMPMAX 0
#define L_ctermid 1
#define L_cuserid 1
#define FOPEN_MAX 16
#define FILENAME_MAX 14

View File

@ -0,0 +1,72 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <sysdep.h>
#include <errno.h>
#include <unistd.h>
#include <stddef.h>
#include "filedesc.h"
#include <fcntl.h>
#include <standalone.h>
/* Write NBYTES of BUF to FD. Return the number written, or -1. */
ssize_t
DEFUN(__write, (fd, buf, nbytes),
int fd AND CONST PTR buf AND size_t nbytes)
{
int count;
CONST char *data = buf;
if (nbytes == 0)
return 0;
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
{
errno = EBADF;
return -1;
}
if (buf == NULL)
{
errno = EINVAL;
return -1;
}
if ( !(__FD_Table[ fd ].flags & (O_WRONLY|O_RDWR)) ) /* is it writeable? */
{
errno = EBADF;
return -1;
}
/*
* All open file descriptors are mapped to the console.
*/
for ( count=0 ; count != nbytes ; count++ ) {
if ( _Console_Putc(data[ count ]) == -1 )
return -1;
if ( data[count] == '\n' && _Console_Putc('\r') == -1 )
return -1;
}
return count;
}