diff options
81 files changed, 8181 insertions, 13 deletions
@@ -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 |