2000-12-08 Werner Almesberger <Werner.Almesberger@epfl.ch>

* configure.host: Added x86 linux target.
        * libc/unix/getpass.c (_PATH_PASSWD, _PASSWORD_LEN): Default
        definitions provided if not already defined.
        * libc/sys/linux/crt0.c: New file.
        * libc/sys/linux/Makefile.am: Ditto.
        * libc/sys/linux/Makefile.in: Ditto.
        * libc/sys/linux/aclocal.m4: Ditto.
        * libc/sys/linux/brk.c: Ditto.
        * libc/sys/linux/configure: Ditto.
        * libc/sys/linux/configure.in: Ditto.
        * libc/sys/linux/getoptlong.c: Ditto.
        * libc/sys/linux/ids.c: Ditto.
        * libc/sys/linux/inode.c: Ditto.
        * libc/sys/linux/io.c: Ditto.
        * libc/sys/linux/linux.c: Ditto.
        * libc/sys/linux/process.c: Ditto.
        * libc/sys/linux/realpath.c: Ditto.
        * libc/sys/linux/select.c: Ditto.
        * libc/sys/linux/signal.c: Ditto.
        * libc/sys/linux/systat.c: Ditto.
        * libc/sys/linux/termios.c: Ditto.
        * libc/sys/linux/time.c: Ditto.
        * libc/sys/linux/wait.c: Ditto.
        * libc/sys/linux/include/alloca.h: Ditto.
        * libc/sys/linux/include/getopt.h: Ditto.
        * libc/sys/linux/include/stdint.h: Ditto.
        * libc/sys/linux/include/unistd.h: Ditto.
        * libc/sys/linux/sys/cdefs.h: Ditto.
        * libc/sys/linux/sys/dirent.h: Ditto.
        * libc/sys/linux/sys/errno.h: Ditto.
        * libc/sys/linux/sys/fcntl.h: Ditto.
        * libc/sys/linux/sys/file.h: Ditto.
        * libc/sys/linux/sys/ioctl.h: Ditto.
        * libc/sys/linux/sys/resource.h: Ditto.
        * libc/sys/linux/sys/signal.h: Ditto.
        * libc/sys/linux/sys/stat.h: Ditto.
        * libc/sys/linux/sys/syscall.h: Ditto.
        * libc/sys/linux/sys/termios.h: Ditto.
        * libc/sys/linux/sys/time.h: Ditto.
        * libc/sys/linux/sys/types.h: Ditto.
        * libc/sys/linux/sys/utmp.h: Ditto.
        * libc/sys/linux/sys/utsname.h: Ditto.
        * libc/sys/linux/sys/wait.h: Ditto.
This commit is contained in:
Jeff Johnston 2000-12-09 01:20:32 +00:00
parent a08c98bb80
commit 2efbc2a7df
43 changed files with 3532 additions and 0 deletions

View File

@ -1,3 +1,49 @@
2000-12-08 Werner Almesberger <Werner.Almesberger@epfl.ch>
* configure.host: Added x86 linux target.
* libc/unix/getpass.c (_PATH_PASSWD, _PASSWORD_LEN): Default
definitions provided if not already defined.
* libc/sys/linux/crt0.c: New file.
* libc/sys/linux/Makefile.am: Ditto.
* libc/sys/linux/Makefile.in: Ditto.
* libc/sys/linux/aclocal.m4: Ditto.
* libc/sys/linux/brk.c: Ditto.
* libc/sys/linux/configure: Ditto.
* libc/sys/linux/configure.in: Ditto.
* libc/sys/linux/getoptlong.c: Ditto.
* libc/sys/linux/ids.c: Ditto.
* libc/sys/linux/inode.c: Ditto.
* libc/sys/linux/io.c: Ditto.
* libc/sys/linux/linux.c: Ditto.
* libc/sys/linux/process.c: Ditto.
* libc/sys/linux/realpath.c: Ditto.
* libc/sys/linux/select.c: Ditto.
* libc/sys/linux/signal.c: Ditto.
* libc/sys/linux/systat.c: Ditto.
* libc/sys/linux/termios.c: Ditto.
* libc/sys/linux/time.c: Ditto.
* libc/sys/linux/wait.c: Ditto.
* libc/sys/linux/include/alloca.h: Ditto.
* libc/sys/linux/include/getopt.h: Ditto.
* libc/sys/linux/include/stdint.h: Ditto.
* libc/sys/linux/include/unistd.h: Ditto.
* libc/sys/linux/sys/cdefs.h: Ditto.
* libc/sys/linux/sys/dirent.h: Ditto.
* libc/sys/linux/sys/errno.h: Ditto.
* libc/sys/linux/sys/fcntl.h: Ditto.
* libc/sys/linux/sys/file.h: Ditto.
* libc/sys/linux/sys/ioctl.h: Ditto.
* libc/sys/linux/sys/resource.h: Ditto.
* libc/sys/linux/sys/signal.h: Ditto.
* libc/sys/linux/sys/stat.h: Ditto.
* libc/sys/linux/sys/syscall.h: Ditto.
* libc/sys/linux/sys/termios.h: Ditto.
* libc/sys/linux/sys/time.h: Ditto.
* libc/sys/linux/sys/types.h: Ditto.
* libc/sys/linux/sys/utmp.h: Ditto.
* libc/sys/linux/sys/utsname.h: Ditto.
* libc/sys/linux/sys/wait.h: Ditto.
2000-12-08 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: $(INSTALL), $(INSTALL_DATA), and $(INSTALL_PROGRAM)

View File

@ -243,6 +243,24 @@ case "${host}" in
sys_dir=sysvi386
unix_dir=unix
;;
i[3456]86-pc-linux-*)
sys_dir=linux
unix_dir=unix
posix_dir=posix
gcc_dir=`gcc -print-search-dirs | awk '/^install:/{print $2}'`
#newlib_cflags="${newlib_cflags} -Werror" # DEBUGGING ONLY;BREAKS BUILD
newlib_cflags="${newlib_cflags} -Wall"
newlib_cflags="${newlib_cflags} -D_I386MACH_ALLOW_HW_INTERRUPTS"
newlib_cflags="${newlib_cflags} -D_LOOSE_KERNEL_NAMES"
# --- Required when building a shared library ------------------------
newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION"
# --- The three lines below are optional ------------------------------
##newlib_cflags="${newlib_cflags} -nostdinc"
##newlib_cflags="${newlib_cflags} -I`newlib-flags --kernel-dir`/include"
##newlib_cflags="${newlib_cflags} -idirafter ${gcc_dir}include"
;;
m68k-sun-sunos*)
unix_dir=unix
;;

View File

@ -0,0 +1,26 @@
## 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 = \
brk.c getoptlong.c ids.c inode.c io.c linux.c process.c realpath.c \
select.c signal.c systat.c termios.c time.c wait.c
all: crt0.o
signal.o: siglist.inc
siglist.inc:
awk '/#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
/#define.NSIG.*[1-9][0-9]*/ { max = $$3 } \
/#define.SIGUNUSED/ \
{ for (i = 0; i <= max; i++) print "\"" n[i] "\"," }' \
</usr/src/linux/include/asm/signal.h >siglist.inc || \
{ rm -f siglist.inc; exit 1; }
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host

View File

@ -0,0 +1,334 @@
# Makefile.in generated automatically by automake 1.4 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AR = @AR@
AS = @AS@
CC = @CC@
CPP = @CPP@
EXEEXT = @EXEEXT@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
VERSION = @VERSION@
machine_dir = @machine_dir@
newlib_basedir = @newlib_basedir@
sys_dir = @sys_dir@
AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
noinst_LIBRARIES = lib.a
lib_a_SOURCES = \
brk.c getoptlong.c ids.c inode.c io.c linux.c process.c realpath.c \
select.c signal.c systat.c termios.c time.c wait.c
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
DEFS = @DEFS@ -I. -I$(srcdir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
lib_a_LIBADD =
lib_a_OBJECTS = brk.o getoptlong.o ids.o inode.o io.o linux.o process.o \
realpath.o select.o signal.o systat.o termios.o time.o wait.o
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in aclocal.m4 configure configure.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
SOURCES = $(lib_a_SOURCES)
OBJECTS = $(lib_a_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in \
../../../acinclude.m4 ../../../aclocal.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
mostlyclean-noinstLIBRARIES:
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
distclean-noinstLIBRARIES:
maintainer-clean-noinstLIBRARIES:
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
clean-compile:
distclean-compile:
-rm -f *.tab.c
maintainer-clean-compile:
lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)
-rm -f lib.a
$(AR) cru lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
$(RANLIB) lib.a
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
mostlyclean-tags:
clean-tags:
distclean-tags:
-rm -f TAGS ID
maintainer-clean-tags:
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
-rm -rf $(distdir)
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
dc_install_base=`cd $(distdir)/=inst && pwd`; \
cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) dist
-rm -rf $(distdir)
@banner="$(distdir).tar.gz is ready for distribution"; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"
dist: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
dist-all: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
distdir: $(DISTFILES)
-rm -rf $(distdir)
mkdir $(distdir)
-chmod 777 $(distdir)
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am:
check: check-am
installcheck-am:
installcheck: installcheck-am
install-info-am:
install-info: install-info-am
install-exec-am:
install-exec: install-exec-am
install-data-am:
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am:
uninstall: uninstall-am
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
mostlyclean-am
clean: clean-am
distclean-am: distclean-noinstLIBRARIES distclean-compile \
distclean-tags distclean-generic clean-am
distclean: distclean-am
-rm -f config.status
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
maintainer-clean-compile maintainer-clean-tags \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
-rm -f config.status
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-info-am install-info \
install-exec-am install-exec install-data-am install-data install-am \
install uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
all: crt0.o
signal.o: siglist.inc
siglist.inc:
awk '/#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
/#define.NSIG.*[1-9][0-9]*/ { max = $$3 } \
/#define.SIGUNUSED/ \
{ for (i = 0; i <= max; i++) print "\"" n[i] "\"," }' \
</usr/src/linux/include/asm/signal.h >siglist.inc || \
{ rm -f siglist.inc; exit 1; }
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

282
newlib/libc/sys/linux/aclocal.m4 vendored Normal file
View File

@ -0,0 +1,282 @@
dnl aclocal.m4 generated automatically by aclocal 1.4
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
dnl This provides configure definitions used by all the newlib
dnl configure.in files.
dnl Basic newlib configury. This calls basic introductory stuff,
dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
dnl configure.host. The only argument is the relative path to the top
dnl newlib directory.
AC_DEFUN(NEWLIB_CONFIGURE,
[
dnl Default to --enable-multilib
AC_ARG_ENABLE(multilib,
[ --enable-multilib build many library versions (default)],
[case "${enableval}" in
yes) multilib=yes ;;
no) multilib=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
esac], [multilib=yes])dnl
dnl Support --enable-target-optspace
AC_ARG_ENABLE(target-optspace,
[ --enable-target-optspace optimize for space],
[case "${enableval}" in
yes) target_optspace=yes ;;
no) target_optspace=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
esac], [target_optspace=])dnl
dnl Support --enable-newlib-mb
AC_ARG_ENABLE(newlib-mb,
[ --enable-newlib-mb enable multibyte support],
[case "${enableval}" in
yes) newlib_mb=yes ;;
no) newlib_mb=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for newlib-mb option) ;;
esac], [newlib_mb=no])dnl
dnl We may get other options which we don't document:
dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
test -z "[$]{with_target_subdir}" && with_target_subdir=.
if test "[$]{srcdir}" = "."; then
if test "[$]{with_target_subdir}" != "."; then
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
else
newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
fi
else
newlib_basedir="[$]{srcdir}/$1"
fi
AC_SUBST(newlib_basedir)
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE(newlib, 1.8.2)
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
# are probably using a cross compiler, which will not be able to fully
# link an executable. This should really be fixed in autoconf
# itself.
AC_DEFUN(LIB_AC_PROG_CC,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_CHECK_PROG(CC, gcc, gcc)
if test -z "$CC"; then
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
AC_PROG_CC_G
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
LIB_AC_PROG_CC
# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
# run it explicitly here, it will be run implicitly before
# NEWLIB_CONFIGURE, which doesn't work because that means that it will
# be run before AC_CANONICAL_HOST.
AC_CANONICAL_BUILD
AC_CHECK_TOOL(AS, as)
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_PROG_INSTALL
AM_MAINTAINER_MODE
# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
# at least currently, we never actually build a program, so we never
# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
# fails, because we are probably configuring with a cross compiler
# which can't create executables. So we include AC_EXEEXT to keep
# automake happy, but we don't execute it, since we don't care about
# the result.
if false; then
AC_EXEEXT
fi
. [$]{newlib_basedir}/configure.host
case [$]{newlib_basedir} in
/* | [A-Za-z]:[/\\]*) newlib_flagbasedir=[$]{newlib_basedir} ;;
*) newlib_flagbasedir='[$](top_builddir)/'[$]{newlib_basedir} ;;
esac
newlib_cflags="[$]{newlib_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{newlib_flagbasedir}/libc/include"
case "${host}" in
*-*-cygwin*)
newlib_cflags="[$]{newlib_cflags} -I[$]{newlib_flagbasedir}/../winsup/cygwin/include -I[$]{newlib_flagbasedir}/../winsup/w32api/include"
;;
esac
newlib_cflags="[$]{newlib_cflags} -fno-builtin"
NEWLIB_CFLAGS=${newlib_cflags}
AC_SUBST(NEWLIB_CFLAGS)
AC_SUBST(machine_dir)
AC_SUBST(sys_dir)
])
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.
# serial 1
dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
AC_DEFUN(AM_INIT_AUTOMAKE,
[AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
AC_SUBST(VERSION)
dnl test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
ifelse([$3],,
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
AC_REQUIRE([AM_SANITY_CHECK])
AC_REQUIRE([AC_ARG_PROGRAM])
dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
AC_REQUIRE([AC_PROG_MAKE_SET])])
#
# Check to make sure that the build environment is sane.
#
AC_DEFUN(AM_SANITY_CHECK,
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftestfile
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
if test "[$]*" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftestfile`
fi
if test "[$]*" != "X $srcdir/configure conftestfile" \
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "[$]2" = conftestfile
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
rm -f conftest*
AC_MSG_RESULT(yes)])
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
dnl The program must properly implement --version.
AC_DEFUN(AM_MISSING_PROG,
[AC_MSG_CHECKING(for working $2)
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if ($2 --version) < /dev/null > /dev/null 2>&1; then
$1=$2
AC_MSG_RESULT(found)
else
$1="$3/missing $2"
AC_MSG_RESULT(missing)
fi
AC_SUBST($1)])
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
# serial 1
AC_DEFUN(AM_MAINTAINER_MODE,
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode is disabled by default
AC_ARG_ENABLE(maintainer-mode,
[ --enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer],
USE_MAINTAINER_MODE=$enableval,
USE_MAINTAINER_MODE=no)
AC_MSG_RESULT($USE_MAINTAINER_MODE)
AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl
]
)
# Define a conditional.
AC_DEFUN(AM_CONDITIONAL,
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi])

View File

@ -0,0 +1,41 @@
/* libc/sys/linux/brk.c - Change data segment size */
/* Written 2000 by Werner Almesberger */
#include <stddef.h> /* for NULL */
#include <sys/types.h>
#include <sys/unistd.h>
#include <sys/syscall.h>
static char *curr_brk = NULL;
#define __NR___brk __NR_brk /* Linux brk ain't no brk(2) */
static _syscall1(void *,__brk,void *,end_data_segment)
int brk(void *end_data_segment)
{
char *new_brk;
new_brk = __brk(end_data_segment);
if (new_brk != end_data_segment) return -1;
curr_brk = new_brk;
return 0;
}
void *sbrk(size_t increment) /* SHOULD be ptrdiff_t */
{
char *old_brk,*new_brk;
if (!curr_brk) curr_brk = __brk(NULL);
new_brk = __brk(curr_brk+increment);
if (new_brk != curr_brk+increment) return (void *) -1;
old_brk = curr_brk;
curr_brk = new_brk;
return old_brk;
}

1687
newlib/libc/sys/linux/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
dnl This is the newlib/libc/sys/linux configure.in file.
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.5)
AC_INIT(linux.c)
dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
AC_CONFIG_AUX_DIR(../../../..)
NEWLIB_CONFIGURE(../../..)
AC_OUTPUT(Makefile)

View File

@ -0,0 +1,32 @@
/* libc/sys/linux/crt0.c - Run-time initialization */
/* FIXME: This should be rewritten in assembler and
placed in a subdirectory specific to a platform.
There should also be calls to run constructors. */
/* Written 2000 by Werner Almesberger */
#include <stdlib.h>
extern char **environ;
extern int main(int argc,char **argv,char **envp);
void _start(int args)
{
/*
* The argument block begins above the current stack frame, because we
* have no return address. The calculation assumes that sizeof(int) ==
* sizeof(void *). This is okay for i386 user space, but may be invalid in
* other cases.
*/
int *params = &args-1;
int argc = *params;
char **argv = (char **) (params+1);
environ = argv+argc+1;
exit(main(argc,argv,environ));
}

View File

@ -0,0 +1,64 @@
#include <unistd.h>
#include <string.h>
#include <getopt.h>
/* Written 2000 by Werner Almesberger */
static const char *__resume;
int getopt_long(int argc,char *const argv[],const char *optstring,
const struct option *longopts,int *longindex)
{
char *here;
optarg = NULL;
if (!__resume) {
if (argc == optind || *argv[optind] != '-') return -1;
if (argv[optind][1] == '-') {
const struct option *opt;
optarg = strchr(argv[optind],'=');
if (optarg) optarg++;
for (opt = longopts; opt->name &&
(optarg || strcmp(opt->name,argv[optind]+2)) &&
(!optarg || strlen(opt->name) != optarg-argv[optind]-3 ||
strncmp(opt->name,argv[optind]+2,optarg-argv[optind]-3));
opt++);
optind++;
if (!opt->name) return '?';
if ((opt->has_arg == no_argument && optarg) ||
(opt->has_arg == required_argument && !optarg)) return ':';
if (longindex) *longindex = opt-longopts;
if (!opt->flag) return opt->val;
*opt->flag = opt->val;
return 0;
}
else {
__resume = argv[optind]+1;
}
}
here = strchr(optstring,*__resume);
if (!here) {
optind++;
__resume = NULL;
return '?';
}
if (here[1] != ':') {
if (!*++__resume) __resume = NULL;
}
else {
if (__resume[1]) optarg = (char *) __resume+1;
else {
optarg = (char *) argv[++optind];
if (optind == argc || *argv[optind] == '-') {
optind++;
__resume = NULL;
return ':';
}
}
__resume = NULL;
}
if (!__resume) optind++;
return *here;
}

View File

@ -0,0 +1,17 @@
/* libc/sys/linux/ids.c - System calls related to user and group ids */
/* Written 2000 by Werner Almesberger */
#include <sys/types.h>
#include <sys/unistd.h>
#include <sys/syscall.h>
_syscall1(int,setuid,uid_t,uid)
_syscall0(uid_t,getuid)
_syscall1(int,setgid,gid_t,gid)
_syscall0(gid_t,getgid)
_syscall0(uid_t,geteuid)
_syscall0(gid_t,getegid)
_syscall2(int,getgroups,int,size,gid_t *,list)

View File

@ -0,0 +1,13 @@
/* libc/sys/linux/include/alloca.h - Allocate memory on stack */
/* Written 2000 by Werner Almesberger */
#ifndef _NEWLIB_ALLOCA_H
#define _NEWLIB_ALLOCA_H
/* Simple, since we know that we use gcc */
#define alloca(size) __builtin_alloca(size)
#endif

View File

@ -0,0 +1,27 @@
/* libc/sys/linux/include/getopt.h - Extended command line parsing */
/* Written 2000 by Werner Almesberger */
#ifndef _NEWLIB_GETOPT_H
#define _NEWLIB_GETOPT_H
#include <unistd.h>
enum { no_argument, required_argument, optional_argument };
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
int getopt_long(int argc,char *const argv[],const char *optstring,
const struct option *longopts,int *longindex);
int getopt_long_only(int argc,char *const argv[],const char *optstring,
const struct option *longopts,int *longindex);
#endif

View File

@ -0,0 +1,18 @@
/* libc/sys/linux/include/stdint.h - Standard integer types */
/* Written 2000 by Werner Almesberger */
#ifndef _NEWLIB_STDINT_H
#define _NEWLIB_STDINT_H
/*
* FIXME: linux/types.h defines various types that rightfully belong into
* stdint.h. So we have no choice but to include linux/types.h directly, even
* if this causes name space pollution. Note: we have to go via sys/types.h
* in order to resolve some other compatibility issues.
*/
#include <sys/types.h>
#endif

View File

@ -0,0 +1,20 @@
/* libc/sys/linux/include/unistd.h - Various standard functions */
/* Written 2000 by Werner Almesberger */
#ifndef _NEWLIB_UNISTD_H
#define _NEWLIB_UNISTD_H
#include <sys/types.h>
#include <sys/unistd.h>
/* Declare some missing goodies */
extern char *optarg;
extern int optind, opterr, optopt;
int readlink(const char *path, char *buf, size_t bufsiz);
#endif

View File

@ -0,0 +1,32 @@
/* libc/sys/linux/inode.c - Inode-related system calls */
/* Written 2000 by Werner Almesberger */
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/utime.h>
#include <linux/dirent.h>
#include <sys/syscall.h>
_syscall2(int,link,const char *,oldpath,const char *,newpath)
_syscall1(int,unlink,const char *,pathname)
_syscall1(int,chdir,const char *,path)
_syscall3(int,mknod,const char *,pathname,mode_t,mode,dev_t,dev)
_syscall2(int,chmod,const char *,path,mode_t,mode)
_syscall2(int,utime,const char *,filename,struct utimbuf *,buf)
_syscall2(int,access,const char *,filename,int,mode)
_syscall2(int,mkdir,const char *,pathname,mode_t,mode)
_syscall1(int,rmdir,const char *,pathname)
_syscall1(int,pipe,int *,filedes)
_syscall1(mode_t,umask,mode_t,mask)
_syscall1(int,chroot,const char *,path)
_syscall2(int,symlink,const char *,oldpath,const char *,newpath)
_syscall3(int,readlink,const char *,path,char *,buf,size_t,bufsiz)
_syscall2(int,stat,const char *,file_name,struct stat *,buf)
_syscall2(int,lstat,const char *,file_name,struct stat *,buf)
_syscall2(int,fstat,int,filedes,struct stat *,buf)
_syscall3(int,getdents,int,fd,struct dirent *,dirp,unsigned int,count)

View File

@ -0,0 +1,54 @@
/* libc/sys/linux/io.c - Basic input/output system calls */
/* Written 2000 by Werner Almesberger */
#define __KERNEL_PROTOTYPES
#include <stdarg.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#define __NR___ioctl __NR_ioctl
#define __NR___flock __NR_flock
_syscall3(int,read,int,fd,void *,buf,size_t,count)
_syscall3(int,write,int,fd,const void *,buf,size_t,count)
_syscall3(int,open,const char *,file,int,flag,mode_t,mode)
_syscall1(int,close,int,fd)
_syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
_syscall0(int,sync)
_syscall1(int,dup,int,fd)
_syscall2(int,dup2,int,oldfd,int,newfd)
_syscall3(int,fcntl,int,fd,int,cmd,long,arg)
static _syscall3(int,__ioctl,int,fd,int,request,void *,arg)
int ioctl(int fd,int request,...)
{
va_list ap;
int res;
va_start(ap,request);
res = __ioctl(fd,request,va_arg(ap,void *));
va_end(ap);
return res;
}
/* Why are all the types gratuituously different ? */
static _syscall2(long,__flock,unsigned int,fd,unsigned int,cmd)
int flock(int fd,int operation)
{
return __flock(fd,operation);
}

View File

@ -0,0 +1,14 @@
/* libc/sys/linux/linux.c - System-specific system calls */
/* Written 2000 by Werner Almesberger */
/*
* Most system call wrappers have moved to utilities; future fate of this file
* is guided by glibc/autoconf compatibility and FFS
*/
#include <sys/syscall.h>
/* _syscall1(int,delete_module,const char *,name) */

View File

@ -0,0 +1,26 @@
/* libc/sys/linux/process.c - Process-related system calls */
/* Written 2000 by Werner Almesberger */
#include <sys/unistd.h>
#include <sys/syscall.h>
#define __NR__exit __NR_exit
#define __NR__execve __NR_execve
_syscall0(int,fork)
_syscall0(pid_t,vfork)
_syscall3(int,_execve,const char *,file,char * const *,argv,char * const *,envp)
_syscall0(int,getpid)
_syscall2(int,setpgid,pid_t,pid,pid_t,pgid)
_syscall0(pid_t,getppid)
_syscall0(pid_t,getpgrp)
_syscall0(pid_t,setsid)
/* FIXME: get rid of noreturn warning */
#define return for (;;)
_syscall1(void,_exit,int,exitcode)
#undef return

View File

@ -0,0 +1,92 @@
/* realpath.c - Return the canonicalized absolute pathname */
/* Written 2000 by Werner Almesberger */
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <errno.h>
#include <sys/stat.h>
/* FIXME: buffer overrun possible, loops forever on cyclic symlinks */
/*
* Canonical name: never ends with a slash
*/
static int resolve_path(char *path,char *result,char *pos)
{
if (*path == '/') {
*result = '/';
pos = result+1;
path++;
}
*pos = 0;
if (!*path) return 0;
while (1) {
char *slash;
struct stat st;
slash = *path ? strchr(path,'/') : NULL;
if (slash) *slash = 0;
if (!path[0] || (path[0] == '.' &&
(!path[1] || (path[1] == '.' && !path[2])))) {
pos--;
if (pos != result && path[0] && path[1])
while (*--pos != '/');
}
else {
strcpy(pos,path);
if (lstat(result,&st) < 0) return -1;
if (S_ISLNK(st.st_mode)) {
char buf[PATH_MAX];
if (readlink(result,buf,sizeof(buf)) < 0) return -1;
*pos = 0;
if (slash) {
*slash = '/';
strcat(buf,slash);
}
strcpy(path,buf);
if (*path == '/') result[1] = 0;
pos = strchr(result,0);
continue;
}
pos = strchr(result,0);
}
if (slash) {
*pos++ = '/';
path = slash+1;
}
*pos = 0;
if (!slash) break;
}
return 0;
}
char *realpath(const char *path,char *resolved_path)
{
char cwd[PATH_MAX];
char *path_copy;
int res;
if (!*path) {
errno = ENOENT; /* SUSv2 */
return NULL;
}
if (!getcwd(cwd,sizeof(cwd))) return NULL;
strcpy(resolved_path,"/");
if (resolve_path(cwd,resolved_path,resolved_path)) return NULL;
strcat(resolved_path,"/");
path_copy = strdup(path);
if (!path_copy) return NULL;
res = resolve_path(path_copy,resolved_path,strchr(resolved_path,0));
free(path_copy);
if (res) return NULL;
return resolved_path;
}

View File

@ -0,0 +1,12 @@
/* libc/sys/linux/select.c - The select system calls */
/* Written 2000 by Werner Almesberger */
#include <sys/types.h>
#include <sys/time.h>
#include <sys/syscall.h>
_syscall5(int,select,int,n,fd_set *,readfds,fd_set *,writefds,
fd_set *,exceptfds,struct timeval *,timeout)

View File

@ -0,0 +1,55 @@
/* libc/sys/linux/signal.c - Signal handling functions */
/* Written 2000 by Werner Almesberger */
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/syscall.h>
#define __NR___sgetmask __NR_sgetmask /* avoid name space pollution */
#define __NR___ssetmask __NR_ssetmask /* avoid name space pollution */
_syscall2(int,kill,pid_t,pid,int,sig)
_syscall2(__sighandler_t,signal,int,signum,__sighandler_t,handler)
_syscall3(int,sigaction,int,signum,const struct sigaction *,act,
struct sigaction *,oldact)
_syscall1(int,sigsuspend,const sigset_t *,mask)
_syscall1(int,sigpending,sigset_t *,set)
_syscall0(int,pause)
_syscall1(unsigned int,alarm,unsigned int,seconds)
_syscall3(int,sigprocmask,int,how,const sigset_t *,set,sigset_t *,oldset)
static _syscall0(int,__sgetmask)
static _syscall1(int,__ssetmask,int,newmask)
int sigsetmask(int newmask) /* BSD */
{
return __ssetmask(newmask);
}
int sigmask(int signum) /* BSD */
{
return 1 << signum;
}
int sigblock(int mask) /* BSD */
{
return __ssetmask(mask | __sgetmask());
}
int raise(int sig)
{
return kill(getpid(),sig);
}
const char *const sys_siglist[] = {
#include "siglist.inc"
};

View File

@ -0,0 +1,21 @@
/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_CDEFS_H
#define _SYS_CDEFS_H
/*
* Note: the goal here is not compatibility to K&R C. Since we know that we
* have GCC which understands ANSI C perfectly well, we make use of this.
*/
#define __P(args) args
#define __PMT(args) args
#define __const const
#define __signed signed
#define __volatile volatile
#define __DOTS , ...
#endif

View File

@ -0,0 +1,51 @@
/* libc/sys/linux/sys/dirent.h - Directory entry as returned by readdir */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_DIRENT_H
#define _SYS_DIRENT_H
#include <sys/types.h>
#include <linux/dirent.h>
#define HAVE_NO_D_NAMLEN /* no struct dirent->d_namlen */
#define MAXNAMLEN 255 /* sizeof(struct dirent.d_name)-1 */
typedef struct {
int dd_fd; /* directory file */
int dd_loc; /* position in buffer */
int dd_seek;
char *dd_buf; /* buffer */
int dd_len; /* buffer length */
int dd_size; /* amount of data in buffer */
} DIR;
#define __dirfd(dir) (dir)->dd_fd
/* --- redundant --- */
DIR *opendir(const char *);
struct dirent *readdir(DIR *);
void rewinddir(DIR *);
int closedir(DIR *);
/* internal prototype */
void _seekdir(DIR *dir,off_t offset);
#ifndef _POSIX_SOURCE
long telldir (DIR *);
void seekdir (DIR *, off_t loc);
int scandir (const char *__dir,
struct dirent ***__namelist,
int (*select) (const struct dirent *),
int (*compar) (const struct dirent **, const struct dirent **));
int alphasort (const struct dirent **__a, const struct dirent **__b);
#endif /* _POSIX_SOURCE */
#endif

View File

@ -0,0 +1,28 @@
/* libc/sys/linux/sys/errno.h - Errno variable and codes */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_ERRNO_H
#define _SYS_ERRNO_H
/* --- from newlin's sys/errno.h --- */
#include <sys/reent.h>
#ifndef _REENT_ONLY
#define errno (*__errno())
extern int *__errno _PARAMS ((void));
#endif
extern __IMPORT _CONST char * _CONST _sys_errlist[];
extern __IMPORT int _sys_nerr;
#define __errno_r(ptr) ((ptr)->_errno)
/* --- end of slight redundancy (the use of struct _reent->_errno is
hard-coded in perror.c so why pretend anything else could work too ? */
#include <asm/errno.h>
#endif

View File

@ -0,0 +1,29 @@
/* libc/sys/linux/sys/fcntl.h - File access */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_FCNTL_H
#define _SYS_FCNTL_H
#include <sys/types.h>
#include <linux/fcntl.h>
/* --- redundant stuff below --- */
#include <_ansi.h>
extern int creat _PARAMS ((const char *, mode_t));
extern int _open _PARAMS ((const char *, int, ...));
#ifdef __KERNEL_PROTOTYPES
extern int open(const char *pathname, int flags, mode_t mode);
extern int fcntl(int fd, int cmd, long arg);
#else
extern int open _PARAMS ((const char *, int, ...));
extern int fcntl _PARAMS ((int, int, ...));
#endif
extern int _fcntl _PARAMS ((int, int, ...));
#endif

View File

@ -0,0 +1,13 @@
/* libc/sys/linux/sys/file.h - BSD compatibility */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_FILE_H
#define _SYS_FILE_H
#include <sys/fcntl.h>
int flock(int fd,int operation);
#endif

View File

@ -0,0 +1,11 @@
/* libc/sys/linux/sys/ioctl.h - ioctl prototype */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_IOCTL_H
#define _SYS_IOCTL_H
int ioctl(int fd,int request,...);
#endif

View File

@ -0,0 +1,12 @@
/* libc/sys/linux/sys/resource.h - Resource usage */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_RESOURCE_H
#define _SYS_RESOURCE_H
#include <sys/types.h>
#include <linux/resource.h>
#endif

View File

@ -0,0 +1,38 @@
/* libc/sys/linux/sys/signal.h - Signal handling */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_SIGNAL_H
#define _SYS_SIGNAL_H
#include <sys/types.h>
#include <linux/signal.h>
/* --- include/signal.h thinks it knows better :-( --- */
#undef SIG_DFL
#undef SIG_IGN
#undef SIG_ERR
/* --- redundant stuff below --- */
#include <_ansi.h>
int _EXFUN(kill, (int, int));
int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *));
int _EXFUN(sigaddset, (sigset_t *, const int));
int _EXFUN(sigdelset, (sigset_t *, const int));
int _EXFUN(sigismember, (const sigset_t *, int));
int _EXFUN(sigfillset, (sigset_t *));
int _EXFUN(sigemptyset, (sigset_t *));
int _EXFUN(sigpending, (sigset_t *));
int _EXFUN(sigsuspend, (const sigset_t *));
int _EXFUN(sigpause, (int));
#ifndef _POSIX_SOURCE
extern const char *const sys_siglist[];
typedef __sighandler_t sig_t; /* BSDism */
#endif
#endif

View File

@ -0,0 +1,29 @@
/* libc/sys/linux/sys/stat.h - Stat structure and macros */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_STAT_H
#define _SYS_STAT_H
#include <asm/stat.h>
#define __KERNEL__
#include <linux/stat.h>
#undef __KERNEL__
/* --- redundant stuff below --- */
#include <_ansi.h>
#include <sys/types.h>
int _EXFUN(fstat,( int __fd, struct stat *__sbuf ));
int _EXFUN(mkdir,( const char *_path, mode_t __mode ));
int _EXFUN(mkfifo,( const char *__path, mode_t __mode ));
int _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
mode_t _EXFUN(umask,( mode_t __mask ));
#ifndef _POSIX_SOURCE
int _EXFUN(lstat,( const char *file_name, struct stat *buf));
#endif /* _POSIX_SOURCE */
#endif /* _SYS_STAT_H */

View File

@ -0,0 +1,88 @@
/* libc/sys/linux/syscall.h - Linux system calls, common definitions */
/* Written 2000 by Werner Almesberger */
#ifndef SYSCALL_H
#include <sys/errno.h>
#include <asm/unistd.h>
/*
* Note: several system calls are for SysV or BSD compatibility, or are
* specific Linuxisms. Most of those system calls are not implemented in
* this library.
*/
#if defined(__PIC__) && defined(__i386__)
/*
* PIC uses %ebx, so we need to save it during system calls
*/
#undef _syscall1
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
long __res; \
__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"r" ((long)(arg1))); \
__syscall_return(type,__res); \
}
#undef _syscall2
#define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1,type2 arg2) \
{ \
long __res; \
__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2))); \
__syscall_return(type,__res); \
}
#undef _syscall3
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1,type2 arg2,type3 arg3) \
{ \
long __res; \
__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
"d" ((long)(arg3))); \
__syscall_return(type,__res); \
}
#undef _syscall4
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
{ \
long __res; \
__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
"d" ((long)(arg3)),"S" ((long)(arg4))); \
__syscall_return(type,__res); \
}
#undef _syscall5
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
type5,arg5) \
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
{ \
long __res; \
__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"m" ((long)(arg1)),"c" ((long)(arg2)), \
"d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
__syscall_return(type,__res); \
}
#undef _syscall6
#endif /* __PIC__ && __i386__ */
#endif /* SYSCALL_H */

View File

@ -0,0 +1,16 @@
/* libc/sys/linux/sys/termios.h - Terminal control definitions */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_TERMIOS_H
#define _SYS_TERMIOS_H
#include <linux/termios.h>
/* grr, this shouldn't have to be here */
int tcgetattr(int fd,struct termios *termios_p);
int tcsetattr(int fd,int optional_actions,const struct termios *termios_p);
#endif

View File

@ -0,0 +1,22 @@
/* libc/sys/linux/sys/time.h - Time handling */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_TIME_H
#define _SYS_TIME_H
#include <sys/types.h>
#include <linux/time.h>
/* --- redundant stuff below --- */
#include <_ansi.h>
int _EXFUN(gettimeofday, (struct timeval *__p, struct timezone *__z));
int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *));
int _EXFUN(utimes, (const char *__path, struct timeval *__tvp));
int _EXFUN(getitimer, (int __which, struct itimerval *__value));
int _EXFUN(setitimer, (int __which, const struct itimerval *__value,
struct itimerval *__ovalue));
#endif

View File

@ -0,0 +1,29 @@
/* libc/sys/linux/sys/types.h - The usual type zoo */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_TYPES_H
#define _SYS_TYPES_H
/*
* Okay, newlib has its own time_t and clock_t in libc/include/time.h
* Since they're equivalent but not identical, we'll just skip the kernel's
* definitions.
*/
#ifdef __time_t_defined
#define _TIME_T
#else
#define __time_t_defined
#endif
#ifdef __clock_t_defined
#define _CLOCK_T
#else
#define __clock_t_defined
#endif
#include <linux/types.h>
#endif

View File

@ -0,0 +1,54 @@
/* libc/sys/linux/sys/utmp.h - utmp structure */
/* Written 2000 by Werner Almesberger */
/* Some things copied from glibc's /usr/include/bits/utmp.h */
#ifndef _SYS_UTMP_H
#define _SYS_UTMP_H
#include <sys/types.h>
#define UTMP_FILE "/var/run/utmp"
#define UT_LINESIZE 32
#define UT_NAMESIZE 32
#define UT_HOSTSIZE 256
struct utmp {
short int ut_type;
pid_t ut_pid;
char ut_line[UT_LINESIZE];
char ut_id[4];
char ut_user[UT_NAMESIZE];
char ut_host[UT_HOSTSIZE];
char __filler[52];
};
#define RUN_LVL 1
#define BOOT_TIME 2
#define NEW_TIME 3
#define OLD_TIME 4
#define INIT_PROCESS 5
#define LOGIN_PROCESS 6
#define USER_PROCESS 7
#define DEAD_PROCESS 8
/* --- redundant, from sys/cygwin/sys/utmp.h --- */
struct utmp *_getutline (struct utmp *);
struct utmp *getutent (void);
struct utmp *getutid (struct utmp *);
struct utmp *getutline (struct utmp *);
void endutent (void);
void pututline (struct utmp *);
void setutent (void);
void utmpname (const char *);
#endif

View File

@ -0,0 +1,23 @@
/* libc/sys/linux/sys/utsname.h - System identification */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_UTSNAME_H
#define _SYS_UTSNAME_H
#define __UTSNAMELEN 65 /* synchronize with kernel */
struct utsname {
char sysname[__UTSNAMELEN];
char nodename[__UTSNAMELEN];
char release[__UTSNAMELEN];
char version[__UTSNAMELEN];
char machine[__UTSNAMELEN];
char domainname[__UTSNAMELEN];
};
int uname(struct utsname *name);
#endif

View File

@ -0,0 +1,40 @@
/* libc/sys/linux/sys/wait.h - Wait for children */
/* Written 2000 by Werner Almesberger */
#ifndef _SYS_WAIT_H
#define _SYS_WAIT_H
#include <linux/wait.h>
#define WIFEXITED(status) (!WTERMSIG(status))
#define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#define WIFSIGNALED(status) (!WIFSTOPPED(status) && !WIFEXITED(status))
#define WTERMSIG(status) ((status ) & 0x7f)
#define WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
#define WSTOPSIG(status) WEXITSTATUS(status)
#ifndef _POSIX_SOURCE
#define WCOREDUMP(status) ((status) & 0x80)
#endif
/* --- redundant stuff below --- */
#include <_ansi.h>
#include <sys/types.h>
pid_t wait (int *);
pid_t waitpid (pid_t, int *, int);
pid_t _wait (int *);
#ifndef _POSIX_SOURCE
#include <sys/resource.h>
pid_t wait3(int *status,int options,struct rusage *rusage);
pid_t wait4(pid_t pid,int *status,int options,struct rusage *rusage);
#endif
#endif

View File

@ -0,0 +1,10 @@
/* libc/sys/linux/systat.c - System calls related to overall system state */
/* Written 2000 by Werner Almesberger */
#include <sys/utsname.h>
#include <sys/syscall.h>
_syscall1(int,uname,struct utsname *,name)

View File

@ -0,0 +1,37 @@
/* libc/sys/linux/termios.c - Terminal control */
/* Written 2000 by Werner Almesberger */
#include <errno.h>
#include <sys/types.h>
#include <sys/termios.h>
#include <sys/ioctl.h>
int tcgetattr(int fd,struct termios *termios_p)
{
return ioctl(fd,TCGETS,termios_p);
}
int tcsetattr(int fd,int optional_actions,const struct termios *termios_p)
{
int cmd;
switch (optional_actions) {
case TCSANOW:
cmd = TCSETS;
break;
case TCSADRAIN:
cmd = TCSETSW;
break;
case TCSAFLUSH:
cmd = TCSETSF;
break;
default:
errno = EINVAL;
return -1;
}
return ioctl(fd,cmd,termios_p);
}

View File

@ -0,0 +1,28 @@
/* libc/sys/linux/time.c - Time-related system calls */
/* Written 2000 by Werner Almesberger */
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
#include <linux/times.h>
#include <sys/syscall.h>
_syscall1(time_t,time,time_t *,t)
_syscall1(clock_t,times,struct tms *,buf)
_syscall2(int,gettimeofday,struct timeval *,tv,struct timezone *,tz)
_syscall2(int,nanosleep,const struct timespec *,req,struct timespec *,rem)
unsigned int sleep(unsigned int seconds)
{
struct timespec ts;
ts.tv_sec = seconds;
ts.tv_nsec = 0;
if (!nanosleep(&ts,&ts)) return 0;
if (errno == EINTR) return ts.tv_sec;
return -1;
}

View File

@ -0,0 +1,23 @@
/* libc/sys/linux/wait.c - Wait function wrappers */
/* Written 2000 by Werner Almesberger */
#include <sys/wait.h>
#include <sys/syscall.h>
_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
_syscall4(pid_t,wait4,pid_t,pid,int *,status,int,options,struct rusage *,rusage)
pid_t wait3(int *status,int options,struct rusage *rusage)
{
return wait4(-1,status,options,rusage);
}
pid_t wait(int *status)
{
return waitpid(-1,status,0);
}

View File

@ -42,6 +42,14 @@ static char sccsid[] = "@(#)getpass.c 5.9 (Berkeley) 5/6/91";
#include <sys/signal.h>
#include <_syslist.h>
#ifndef _PATH_PASSWD
#define _PATH_PASSWD "/etc/passwd"
#endif
#ifndef _PASSWORD_LEN
#define _PASSWORD_LEN 128 /* max length, not counting NULL */
#endif
char *
getpass (prompt)
const char *prompt;