summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--extra/Configs/Config.v850e192
-rw-r--r--include/elf.h35
-rw-r--r--include/features.h14
-rw-r--r--libc/misc/internals/__uClibc_main.c10
-rw-r--r--libc/stdlib/atexit.c3
-rw-r--r--libc/sysdeps/linux/common/syscalls.c16
-rw-r--r--libc/sysdeps/linux/v850/Makefile57
-rw-r--r--libc/sysdeps/linux/v850/bits/ATTENTION10
-rw-r--r--libc/sysdeps/linux/v850/bits/byteswap.h59
-rw-r--r--libc/sysdeps/linux/v850/bits/cmathcalls.h160
-rw-r--r--libc/sysdeps/linux/v850/bits/confname.h408
-rw-r--r--libc/sysdeps/linux/v850/bits/dirent.h62
-rw-r--r--libc/sysdeps/linux/v850/bits/dlfcn.h37
-rw-r--r--libc/sysdeps/linux/v850/bits/elfclass.h11
-rw-r--r--libc/sysdeps/linux/v850/bits/endian.h18
-rw-r--r--libc/sysdeps/linux/v850/bits/environments.h59
-rw-r--r--libc/sysdeps/linux/v850/bits/errno.h66
-rw-r--r--libc/sysdeps/linux/v850/bits/fcntl.h141
-rw-r--r--libc/sysdeps/linux/v850/bits/fenv.h61
-rw-r--r--libc/sysdeps/linux/v850/bits/huge_val.h88
-rw-r--r--libc/sysdeps/linux/v850/bits/in.h128
-rw-r--r--libc/sysdeps/linux/v850/bits/ioctl-types.h77
-rw-r--r--libc/sysdeps/linux/v850/bits/ioctls.h108
-rw-r--r--libc/sysdeps/linux/v850/bits/ipc.h50
-rw-r--r--libc/sysdeps/linux/v850/bits/libc-lock.h214
-rw-r--r--libc/sysdeps/linux/v850/bits/local_lim.h55
-rw-r--r--libc/sysdeps/linux/v850/bits/mathcalls.h336
-rw-r--r--libc/sysdeps/linux/v850/bits/mathdef.h53
-rw-r--r--libc/sysdeps/linux/v850/bits/mathinline.h12
-rw-r--r--libc/sysdeps/linux/v850/bits/mman.h75
-rw-r--r--libc/sysdeps/linux/v850/bits/msq.h70
-rw-r--r--libc/sysdeps/linux/v850/bits/nan.h48
-rw-r--r--libc/sysdeps/linux/v850/bits/poll.h51
-rw-r--r--libc/sysdeps/linux/v850/bits/posix1_lim.h141
-rw-r--r--libc/sysdeps/linux/v850/bits/posix2_lim.h100
-rw-r--r--libc/sysdeps/linux/v850/bits/posix_opt.h110
-rw-r--r--libc/sysdeps/linux/v850/bits/pthreadtypes.h122
-rw-r--r--libc/sysdeps/linux/v850/bits/resource.h204
-rw-r--r--libc/sysdeps/linux/v850/bits/sched.h73
-rw-r--r--libc/sysdeps/linux/v850/bits/select.h35
-rw-r--r--libc/sysdeps/linux/v850/bits/sem.h88
-rw-r--r--libc/sysdeps/linux/v850/bits/setjmp.h37
-rw-r--r--libc/sysdeps/linux/v850/bits/shm.h84
-rw-r--r--libc/sysdeps/linux/v850/bits/sigaction.h77
-rw-r--r--libc/sysdeps/linux/v850/bits/sigcontext.h29
-rw-r--r--libc/sysdeps/linux/v850/bits/siginfo.h279
-rw-r--r--libc/sysdeps/linux/v850/bits/signum.h80
-rw-r--r--libc/sysdeps/linux/v850/bits/sigset.h128
-rw-r--r--libc/sysdeps/linux/v850/bits/sigstack.h55
-rw-r--r--libc/sysdeps/linux/v850/bits/sigthread.h41
-rw-r--r--libc/sysdeps/linux/v850/bits/sockaddr.h47
-rw-r--r--libc/sysdeps/linux/v850/bits/socket.h305
-rw-r--r--libc/sysdeps/linux/v850/bits/stab.def234
-rw-r--r--libc/sysdeps/linux/v850/bits/stat.h127
-rw-r--r--libc/sysdeps/linux/v850/bits/statfs.h61
-rw-r--r--libc/sysdeps/linux/v850/bits/statvfs.h94
-rw-r--r--libc/sysdeps/linux/v850/bits/stdio-lock.h39
-rw-r--r--libc/sysdeps/linux/v850/bits/stdio.h168
-rw-r--r--libc/sysdeps/linux/v850/bits/stdio_lim.h37
-rw-r--r--libc/sysdeps/linux/v850/bits/string.h10
-rw-r--r--libc/sysdeps/linux/v850/bits/string2.h1214
-rw-r--r--libc/sysdeps/linux/v850/bits/stropts.h219
-rw-r--r--libc/sysdeps/linux/v850/bits/syscalls.h4
-rw-r--r--libc/sysdeps/linux/v850/bits/termios.h212
-rw-r--r--libc/sysdeps/linux/v850/bits/time.h59
-rw-r--r--libc/sysdeps/linux/v850/bits/types.h153
-rw-r--r--libc/sysdeps/linux/v850/bits/uio.h46
-rw-r--r--libc/sysdeps/linux/v850/bits/ustat.h27
-rw-r--r--libc/sysdeps/linux/v850/bits/utmp.h105
-rw-r--r--libc/sysdeps/linux/v850/bits/utmpx.h86
-rw-r--r--libc/sysdeps/linux/v850/bits/utsname.h29
-rw-r--r--libc/sysdeps/linux/v850/bits/waitflags.h30
-rw-r--r--libc/sysdeps/linux/v850/bits/waitstatus.h104
-rw-r--r--libc/sysdeps/linux/v850/bits/wordsize.h19
-rw-r--r--libc/sysdeps/linux/v850/bits/xopen_lim.h96
-rw-r--r--libc/sysdeps/linux/v850/clinkage.h14
-rw-r--r--libc/sysdeps/linux/v850/crt0.S51
-rw-r--r--libc/sysdeps/linux/v850/longjmp.S48
-rw-r--r--libc/sysdeps/linux/v850/setjmp.S39
-rw-r--r--libc/sysdeps/linux/v850/vfork.S42
81 files changed, 8181 insertions, 13 deletions
diff --git a/Makefile b/Makefile
index 61ec627d2..897c415a3 100644
--- a/Makefile
+++ b/Makefile
@@ -64,6 +64,8 @@ headers: dummy
@rm -f include/asm include/linux include/bits
@if [ $(TARGET_ARCH) = "powerpc" ];then \
ln -fs $(KERNEL_SOURCE)/include/asm-ppc include/asm; \
+ elif [ $(TARGET_ARCH) = "v850" ];then \
+ ln -fs $(KERNEL_SOURCE)/include/asm-v850 include/asm; \
else \
if [ $(HAS_MMU) != "true" ]; then \
ln -fs $(KERNEL_SOURCE)/include/asm-$(TARGET_ARCH)nommu include/asm;\
@@ -163,6 +165,12 @@ uClibc_config.h: Makefile Config
else \
echo "#undef __UCLIBC_USE_UNIFIED_SYSCALL__" >> uClibc_config.h ; \
fi
+ @if [ "$(OLD_STYLE_MMAP)" != "false" ] ; then \
+ echo "#define __UCLIBC_OLD_STYLE_MMAP__ 1" >> uClibc_config.h ; \
+ else \
+ echo "#undef __UCLIBC_OLD_STYLE_MMAP__" >> uClibc_config.h ; \
+ fi
+ @echo "#define C_SYMBOL_PREFIX "\""$(C_SYMBOL_PREFIX)"\" >> uClibc_config.h
subdirs: $(patsubst %, _dir_%, $(DIRS))
diff --git a/extra/Configs/Config.v850e b/extra/Configs/Config.v850e
new file mode 100644
index 000000000..3383293f9
--- /dev/null
+++ b/extra/Configs/Config.v850e
@@ -0,0 +1,192 @@
+# Library Configuration rules for uClibc
+#
+# This file contains rules which are shared between multiple Makefiles. Feel
+# free to adjust to taste...
+# -Erik Andersen <andersen@lineo.com> <andersee@debian.org>
+#
+# Copyright (C) 2000, 2001 by Lineo, inc.
+#
+# This program 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.
+#
+# 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 Library General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Derived in part from the Linux-8086 C library, the GNU C Library, and several
+# other sundry sources. Files within this library are copyright by their
+# respective copyright holders.
+
+PROJ_UCLINUX=/proj/soft2/uclinux
+
+# Cross compile on i386-pc-linux-gnu
+DESTDIR=$(PROJ_UCLINUX)/i386-pc-linux-gnu/v850e-linux
+
+# What arch do you want to compile for...
+TARGET_ARCH = v850
+
+# If you are running a cross compiler, you may want to set this
+# to something more interesting...
+NATIVE_CC = gcc
+CROSS = v850e-elf-
+CC = $(CROSS)gcc
+AR = $(CROSS)ar
+LD = $(CROSS)ld
+NM = $(CROSS)nm
+STRIPTOOL = $(CROSS)strip
+#STRIPTOOL = /bin/true
+
+# Set the following to `true' to make a debuggable build, and `false' for
+# production builds.
+DODEBUG = true
+
+# Compiler warnings you want to see
+WARNINGS=-Wall
+
+# Note that the kernel source you use to compile with should be the same as the
+# Linux kernel you run your apps on. uClibc doesn't even try to achieve binary
+# compatibility across kernel versions. So don't expect, for example, uClibc
+# compiled with Linux kernel 2.0.x to implement lchown properly, since 2.0.x
+# can't do that. Similarly, if you compile uClibc vs Linux 2.4.x kernel headers,
+# but then run on Linux 2.0.x, lchown will be compiled into uClibc, but won't
+# work at all. You have been warned.
+KERNEL_SOURCE=$(PROJ_UCLINUX)/uclinux/linux-2.4.6
+
+# Set this to `false' if your CPU doesn't have a memory management unit (MMU).
+# Set it to `true' otherwise.
+HAS_MMU = false
+
+# Set this to `false' if you don't have/need basic floating point support
+# support in libc (strtod, printf, scanf). Set it to `true' otherwise.
+# Note: If not true, Rules.mak disables libm as well.
+HAS_FLOATING_POINT = true
+
+# Set this to `false' if you don't have/need float functions in libm.
+# Set it to `true' otherwise, and make sure HAS_FLOATING_POINT is true as well.
+HAS_LIBM_FLOAT = true
+
+# Set this to `false' if you don't have/need double functions in libm.
+# Set it to `true' otherwise, and make sure HAS_FLOATING_POINT is true as well.
+HAS_LIBM_DOUBLE = true
+
+# Set this to `false' if you don't have/need long double functions in libm.
+# Set it to `true' otherwise, and make sure HAS_FLOATING_POINT is true as well.
+HAS_LIBM_LONG_DOUBLE = false
+
+# Set this to `false' if you don't have/need "(unsigned) long long int" support.
+# Set it to `true' otherwise.
+# Affects *printf and *scanf functions.
+# Also omits strto(u)ll, and (u)lltostr from the library if `false'.
+HAS_LONG_LONG = true
+
+# Set this to `false' if you don't have/need locale support; `true' otherwise.
+# Note: Currently only affects the ctype functions. You must also generate
+# a locale file for anything but the C locale. See directory extra/locale for
+# a utility to do so. Also see the following option.
+HAS_LOCALE = false
+
+# Set this to the path of your uClibc locale file directory.
+# Warning! This must be different than the glibc locale directory to avoid
+# name conflicts, as the locale files are entirely different in format!
+LOCALE_DIR = "/usr/share/uClibc-locale/"
+
+# This specifies which malloc implementation is used.
+# "malloc-simple" is very, very small, but is also very, very dumb
+# and does not try to make good use of memory or clean up after itself.
+#
+# "malloc" on the other hand is a bit bigger, but is pretty smart thereby
+# minimizing memory wastage and reusing already allocated memory. This
+# can be lots faster and safer IMHO.
+#
+# "malloc-930716" is from libc-5.3.12 and was/is the standard gnu malloc.
+# It is actually smaller than "malloc", at least on i386. Right now, it
+# only works on i386 (and maybe m68k) because it needs sbrk.
+#MALLOC = malloc-simple
+MALLOC = malloc
+#MALLOC = malloc-930716
+
+# If you want to collect common syscall code into one function, set to this to
+# `true'. Set it to false otherwise.
+# On i386 this saves about than 2.8k over all syscalls.
+# The idea came from the implementation in dietlibc.
+# At present, only affects i386.
+UNIFIED_SYSCALL = false
+
+# If false, then the mmap syscall takes individual arguments, just like
+# every other syscall; otherwise, they're all packed into a buffer first
+# (which was necessary on old version of linux worked).
+OLD_STYLE_MMAP = false
+
+# If you want large file summit support (greater then 2 Gib),
+# turn this on. This has no effect unless your kernel supports
+# lfs. This currently does nothing, but may someday...
+DOLFS = false
+
+# If you want to include RPC support, enable this. RPC is almost never used
+# for anything except NFS support, so unless you plan to use NFS, leave this
+# disabled. This is off by default.
+INCLUDE_RPC = false
+
+# If you want to include support for the next version of the Internet
+# Protocol: IP version 6, enable this. This is off by default.
+INCLUDE_IPV6 = false
+
+# If you want to compile the library as PIC code, turn this on.
+DOPIC = false
+
+# String prefixed to all user symbol names by the C compiler. Usually
+# either empty or an underscore.
+C_SYMBOL_PREFIX = _
+
+# Enable support for shared libraries? If this is false, you can
+# ignore all the rest of the options in this file...
+HAVE_SHARED = false
+
+# uClibc has a native shared library loader for some architectures.
+BUILD_UCLIBC_LDSO=false
+
+# If you are using shared libraries, but do not want/have a native
+# uClibc shared library loader, please specify the name of your
+# system's shared library loader here...
+#SYSTEM_LDSO=/lib/ld-linux.so.2
+
+# When using shared libraries, this path is the location where the
+# shared library will be invoked. This value will be compiled into
+# every binary compiled with uClibc.
+#
+# BIG FAT WARNING:
+# If you do not have a shared library loader with the correct name
+# sitting in the directory this points to, your binaries will not run.
+#SHARED_LIB_LOADER_PATH=$(DEVEL_PREFIX)/lib
+
+# DEVEL_PREFIX is the directory into which the uClibc development
+# environment will be installed. The result will look something
+# like the following:
+# DEVEL_PREFIX/
+# bin/ <contains gcc, ld, etc>
+# lib/ <contains all runtime and static libs>
+# include/ <Where all the header files go>
+# This value is used by the 'make install' Makefile target. Since this
+# directory is compiled into the uclibc cross compiler spoofer, you
+# have to recompile if you change this value...
+DEVEL_PREFIX = $(DESTDIR)
+
+# SYSTEM_DEVEL_PREFIX is the directory prefix used when installing
+# usr/bin/arch-uclibc-gcc, usr/bin/arch-uclibc-ld, etc. This is only
+# used by the 'make install' target, and is not compiled into anything.
+# This defaults to $DEVEL_PREFIX, but makers of .rpms and .debs will
+# want to set this to "/" instead.
+SYSTEM_DEVEL_PREFIX = $(DEVEL_PREFIX)
+
+# If you want 'make install' to install everything under a temporary
+# directory, the define PREFIX during the install step,
+# i.e., 'make PREFIX=/var/tmp/uClibc install'.
+#PREFIX = $(TOPDIR)/_install
+PREFIX =
diff --git a/include/elf.h b/include/elf.h
index da82d591f..b059583be 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -2093,6 +2093,41 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_CRIS_NUM 20
+/* v850 relocations. */
+#define R_V850_NONE 0
+#define R_V850_9_PCREL 1
+#define R_V850_22_PCREL 2
+#define R_V850_HI16_S 3
+#define R_V850_HI16 4
+#define R_V850_LO16 5
+#define R_V850_32 6
+#define R_V850_16 7
+#define R_V850_8 8
+#define R_V850_SDA_16_16_OFFSET 9 /* For ld.b, st.b, set1, clr1,
+ not1, tst1, movea, movhi */
+#define R_V850_SDA_15_16_OFFSET 10 /* For ld.w, ld.h, ld.hu, st.w, st.h */
+#define R_V850_ZDA_16_16_OFFSET 11 /* For ld.b, st.b, set1, clr1,
+ not1, tst1, movea, movhi */
+#define R_V850_ZDA_15_16_OFFSET 12 /* For ld.w, ld.h, ld.hu, st.w, st.h */
+#define R_V850_TDA_6_8_OFFSET 13 /* For sst.w, sld.w */
+#define R_V850_TDA_7_8_OFFSET 14 /* For sst.h, sld.h */
+#define R_V850_TDA_7_7_OFFSET 15 /* For sst.b, sld.b */
+#define R_V850_TDA_16_16_OFFSET 16 /* For set1, clr1, not1, tst1,
+ movea, movhi */
+/* CYGNUS LOCAL v850e */
+#define R_V850_TDA_4_5_OFFSET 17 /* For sld.hu */
+#define R_V850_TDA_4_4_OFFSET 18 /* For sld.bu */
+#define R_V850_SDA_16_16_SPLIT_OFFSET 19 /* For ld.bu */
+#define R_V850_ZDA_16_16_SPLIT_OFFSET 20 /* For ld.bu */
+#define R_V850_CALLT_6_7_OFFSET 21 /* For callt */
+#define R_V850_CALLT_16_16_OFFSET 22 /* For callt */
+/* END CYGNUS LOCAL */
+#define R_V850_GNU_VTINHERIT 23
+#define R_V850_GNU_VTENTRY 24
+
+#define R_V850_NUM 25
+
+
__END_DECLS
#endif /* elf.h */
diff --git a/include/features.h b/include/features.h
index 21e36ae51..3d61b76d9 100644
--- a/include/features.h
+++ b/include/features.h
@@ -329,12 +329,16 @@
/* Some nice features only work properly with ELF */
#if defined HAVE_ELF
-# define link_warning(symbol, msg) \
- asm (".section " ".gnu.warning." #symbol "\n\t.previous"); \
- static const char __evoke_link_warning_##symbol[] \
+# define link_warning(symbol, msg) \
+ asm (".section " ".gnu.warning." #symbol "\n\t.previous"); \
+ static const char __evoke_link_warning_##symbol[] \
__attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
-# define weak_alias(name, aliasname) \
- asm(".global " #name ";.weak " #aliasname ";" #aliasname "=" #name ";");
+# define weak_alias(name, aliasname) \
+ asm(".global " C_SYMBOL_PREFIX #name ";" \
+ ".weak " C_SYMBOL_PREFIX #aliasname ";" \
+ C_SYMBOL_PREFIX #aliasname "=" C_SYMBOL_PREFIX #name ";");
+# define weak_symbol(name) \
+ asm(".weak " C_SYMBOL_PREFIX #name ";");
#else
# define link_warning(symbol, msg) \
asm (".stabs \"" msg "\",30,0,0,0\n\t" \
diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c
index a81448fae..c2996735f 100644
--- a/libc/misc/internals/__uClibc_main.c
+++ b/libc/misc/internals/__uClibc_main.c
@@ -26,8 +26,8 @@ void __uClibc_main(int argc, char **argv, char **envp)
#ifdef HAVE_ELF
weak_alias(__environ, environ);
-weak_alias(__uClibc_empty_func, __init_stdio);
-weak_alias(__uClibc_empty_func, __stdio_close_all);
+weak_symbol(__init_stdio);
+weak_symbol(__stdio_close_all);
#endif
extern void __init_stdio(void);
@@ -51,7 +51,8 @@ void __uClibc_main(int argc, char **argv, char **envp)
* Initialize stdio here. In the static library case, this will
* be bypassed if not needed because of the weak alias above.
*/
- __init_stdio();
+ if (__init_stdio)
+ __init_stdio();
/*
* Note: It is possible that any initialization done above could
@@ -74,6 +75,7 @@ void __uClibc_main(int argc, char **argv, char **envp)
char **__environ = 0;
+#ifndef HAVE_ELF
/*
* Define an empty function and use it as a weak alias for the stdio
* initialization routine. That way we don't pull in all the stdio
@@ -87,9 +89,7 @@ void __uClibc_empty_func(void)
{
}
-#ifndef HAVE_ELF
weak_alias(__environ, environ);
weak_alias(__uClibc_empty_func, __init_stdio);
weak_alias(__uClibc_empty_func, __stdio_close_all);
#endif
-
diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c
index 503e3da1f..45ecefe9c 100644
--- a/libc/stdlib/atexit.c
+++ b/libc/stdlib/atexit.c
@@ -46,7 +46,8 @@ static void atexit_handler(void)
for (count = __atexit_count ; count-- ; ) {
(*__atexit_table[count])();
}
- __stdio_close_all();
+ if (__stdio_close_all)
+ __stdio_close_all();
}
int atexit(vfuncp ptr)
diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c
index 05179548d..0d470db8c 100644
--- a/libc/sysdeps/linux/common/syscalls.c
+++ b/libc/sysdeps/linux/common/syscalls.c
@@ -2,7 +2,7 @@
/*
* Syscalls for uClibc
*
- * Copyright (C) 2000 by Lineo, inc. Written by Erik Andersen
+ * Copyright (C) 2000, 2001 by Lineo, inc. Written by Erik Andersen
* <andersen@lineo.com>, <andersee@debian.org>
*
* This program is free software; you can redistribute it and/or modify it
@@ -635,13 +635,16 @@ int reboot(int flag)
//#define __NR_readdir 89
//#define __NR_mmap 90