From 9aa665e9dcd0693d0d25d61b354976de5870de68 Mon Sep 17 00:00:00 2001 From: Jesse Keating Date: Sat, 20 Oct 2007 05:24:15 +0000 Subject: [PATCH 01/65] Initialize branch F-8 for dietlibc --- branch | 1 + 1 file changed, 1 insertion(+) create mode 100644 branch diff --git a/branch b/branch new file mode 100644 index 0000000..e9e7ccd --- /dev/null +++ b/branch @@ -0,0 +1 @@ +F-8 From 12753e6b7ef4b5884cfe0edd262c526fad53af68 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:08:54 +0000 Subject: [PATCH 02/65] initial checkin --- dietlibc-0.31-printftest.patch | 46 +++++++++++++++++++++++++ dietlibc-0.31.20080212-printffmt.patch | 33 ++++++++++++++++++ dietlibc-0.31.20080212-teststdout.patch | 46 +++++++++++++++++++++++++ runtests-X.sh | 29 ++++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 dietlibc-0.31-printftest.patch create mode 100644 dietlibc-0.31.20080212-printffmt.patch create mode 100644 dietlibc-0.31.20080212-teststdout.patch create mode 100644 runtests-X.sh diff --git a/dietlibc-0.31-printftest.patch b/dietlibc-0.31-printftest.patch new file mode 100644 index 0000000..b0bb3b9 --- /dev/null +++ b/dietlibc-0.31-printftest.patch @@ -0,0 +1,46 @@ +diff -up dietlibc-0.31.20080212/test/printf.c.~1~ dietlibc-0.31.20080212/test/printf.c +--- dietlibc-0.31.20080212/test/printf.c.~1~ 2004-01-07 16:06:48.000000000 +0100 ++++ dietlibc-0.31.20080212/test/printf.c 2008-02-13 17:25:35.000000000 +0100 +@@ -38,7 +38,8 @@ + #define TEST_SNPRINTF(EXP,SZ, ...) \ + { \ + volatile char * args[] = { EXP, #SZ }; \ +- int test_sz=MIN((SZ),sizeof(EXP))-1; \ ++ ssize_t test_sz=MIN((SZ),sizeof(EXP))-1; \ ++ (void)args; \ + TEST_INIT(EXP); \ + rc=snprintf(buf+ALGN,(SZ),__VA_ARGS__); \ + TEST_CHECK(EXP, test_sz); \ +@@ -80,6 +80,7 @@ int main() + + TEST("foobar", "%s", "foobar"); + TEST("01.23", "%05.2f", 1.23); ++ TEST("001.2", "%05.2g", 1.23); + + TEST("42", "%i", 42); + TEST("", "%.0i", 0); +@@ -111,6 +112,24 @@ int main() + + TEST("0x1", "%#x", 1); + ++ TEST("abcX", "%2sX", "abc"); ++ TEST("abcX", "%-2sX", "abc"); ++ ++ TEST("001234", "%.6u", 1234); ++ TEST("-001234", "%.6i", -1234); ++ TEST(" 1234", "%6u", 1234); ++ TEST(" -1234", "%6i", -1234); ++ TEST("001234", "%06u", 1234); ++ TEST("-01234", "%06i", -1234); ++ TEST("1234 ", "%-6u", 1234); ++ TEST("-1234 ", "%-6i", -1234); ++ TEST("1234", "%.6s", "1234"); ++ TEST(" 1234", "%6s", "1234"); ++ TEST("1234 ", "%-6s", "1234"); ++ TEST(" 01234", "%6.5u", 1234); ++ TEST("-01234", "%6.5i", -1234); ++ TEST(" 1234", "%6.5s", "1234"); ++ + #ifdef XSI_TESTS + setlocale(LC_ALL, "de_DE"); + diff --git a/dietlibc-0.31.20080212-printffmt.patch b/dietlibc-0.31.20080212-printffmt.patch new file mode 100644 index 0000000..1d95d07 --- /dev/null +++ b/dietlibc-0.31.20080212-printffmt.patch @@ -0,0 +1,33 @@ +diff -up dietlibc-0.31.20080212/test/printf.c.~1~ dietlibc-0.31.20080212/test/printf.c +diff -up dietlibc-0.31.20080212/lib/__v_printf.c.~1~ dietlibc-0.31.20080212/lib/__v_printf.c +--- dietlibc-0.31.20080212/lib/__v_printf.c.~1~ 2008-02-13 15:42:52.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/__v_printf.c 2008-02-13 17:26:13.000000000 +0100 +@@ -222,7 +222,7 @@ print_out: + + if (flag_dot && width==0) width=preci; + if (!flag_dot) preci=sz; +- if (!flag_left) { /* do left-side padding */ ++ if (!flag_left && padwith==' ') { /* do left-side padding with spaces */ + if (write_pad(&len,fn,width-preci,padwith)) + return -1; + } +@@ -230,6 +230,10 @@ print_out: + B_WRITE(fn,sign,todo); + len+=todo; + } ++ if (!flag_left && padwith!=' ') { /* do left-side padding with '0' */ ++ if (write_pad(&len,fn,width-preci,padwith)) ++ return -1; ++ } + /* do preci padding */ + if (write_pad(&len,fn,preci-sz,precpadwith)) + return -1; +@@ -385,7 +389,7 @@ num_printf: + + sz=strlen(s); + if (width + + void blah(void) { +- write(2,"atexit\n",7); ++ write(1,"atexit\n",7); + } + + int main() { +diff -up dietlibc-0.31.20080212/test/sendfile.c.~1~ dietlibc-0.31.20080212/test/sendfile.c +--- dietlibc-0.31.20080212/test/sendfile.c.~1~ 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080212/test/sendfile.c 2008-02-13 18:35:34.000000000 +0100 +@@ -11,5 +11,5 @@ int main() { + + printf("sendfile returned %d\n",ret); + +-return 0; ++ return ret<0 ? 1 : 0; + } +diff -up dietlibc-0.31.20080212/test/malloc-debugger.c.~1~ dietlibc-0.31.20080212/test/malloc-debugger.c +--- dietlibc-0.31.20080212/test/malloc-debugger.c.~1~ 2003-02-20 16:57:13.000000000 +0100 ++++ dietlibc-0.31.20080212/test/malloc-debugger.c 2008-02-13 18:34:27.000000000 +0100 +@@ -4,7 +4,7 @@ + int main() { + char* c=malloc(13); + char* tmp; +- fprintf(stderr,"got %p\n",c); ++ fprintf(stdout,"got %p\n",c); + c[0]=14; + // c[15]=0; + tmp=realloc(c,12345); +diff -up dietlibc-0.31.20080212/test/waitpid.c.~1~ dietlibc-0.31.20080212/test/waitpid.c +--- dietlibc-0.31.20080212/test/waitpid.c.~1~ 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080212/test/waitpid.c 2008-02-13 18:35:57.000000000 +0100 +@@ -11,7 +11,7 @@ int main() { + perror("fork"); + _exit(1); + case 0: +- fprintf(stderr,"child, my pid is %u\n",getpid()); ++ fprintf(stdout,"child, my pid is %u\n",getpid()); + sleep(1); + _exit(23); + } diff --git a/runtests-X.sh b/runtests-X.sh new file mode 100644 index 0000000..24037c1 --- /dev/null +++ b/runtests-X.sh @@ -0,0 +1,29 @@ +#! /bin/sh + +eval $(grep '^\(TESTPROGRAMS\|SUBDIRS\)=' runtests.sh) + +rc=0 + +: ${RUNTEST_INDENT=0} +export RUNTEST_INDENT + +for p in $TESTPROGRAMS; do + ! tty -s || printf '%*s%-20s' $RUNTEST_INDENT '' "$p" + ./$p >/dev/null && res='OK' || { res='FAIL'; let ++rc; } + + printf '\r%*s%-20s%s\n' $RUNTEST_INDENT '' "$p" "$res" +done + +test $rc -eq 0 || \ + printf "%*s--> %u tests failed\n" $RUNTEST_INDENT '' $rc + +for d in $SUBDIRS; do + echo "--- entering directory $d ---" + let RUNTEST_INDENT+=2 + cd $d && bash ./runtests-X.sh || let ++rc + let RUNTEST_INDENT-=2 + + cd $OLDPWD || exit 1 +done + +test $rc -eq 0 && exit 0 || exit 1 From 128547dd3161c105b6ea32cee07a531cf3a9a178 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:09:50 +0000 Subject: [PATCH 03/65] added 'cvs-sources' target --- Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ba7d5a1..ad740a7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Makefile for source rpm: dietlibc -# $Id$ +# $Id: Makefile,v 1.1 2005/03/04 00:52:22 ensc Exp $ NAME := dietlibc SPECFILE = $(firstword $(wildcard *.spec)) @@ -19,3 +19,12 @@ MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) endif include $(MAKEFILE_COMMON) + + +CVS_BASEVER = 0.31 +CVS_DATE := $(shell date +'%Y%m%d' -d '-1 day') +_cvs_suffix = ${CVS_BASEVER}.${CVS_DATE} + +cvs-sources: + cd ${DESTDIR} . && cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 export -D${CVS_DATE} -d dietlibc-${_cvs_suffix} dietlibc + cd ${DESTDIR} . && tar cjf dietlibc-${_cvs_suffix}.tar.bz2 dietlibc-${_cvs_suffix} --owner root --group root From 71b3ce9a98f1ecf431161d988a0769d17a313c58 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:11:05 +0000 Subject: [PATCH 04/65] updated to CVS snapshot 20080212 --- sources | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sources b/sources index c78adf9..91d1271 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -acb98d469ee932d902fdf6de07802b7c dietlibc-0.31.tar.bz2 -77dadb56faa06c1a5177d76806e79b28 dietlibc-0.31.tar.bz2.sig +11c4b650b3644269a8d2a624fd9780ea dietlibc-0.31.20080212.tar.bz2 From 7cc2662c398cfb7c4d63672629e7c2c308cb93b4 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:12:17 +0000 Subject: [PATCH 05/65] - updated to CVS snapshot 20080212 - fixed printf regression for '%+04i' style formats - added %%check and run a testsuite; it does not succeed now so it is for informational purposes only... --- dietlibc.spec | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index debadf4..274202a 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -5,6 +5,8 @@ ## Fedora Extras specific customization below... ## +%global snapshot 20080212 + %ifarch %ix86 x86_64 arm %global do_dyn 0 %else @@ -27,12 +29,18 @@ Summary: Small libc implementation Name: dietlibc Version: 0.31 -Release: %release_func 1 +Release: %release_func 1%{?snapshot:.%snapshot} License: GPL Group: Development/Libraries URL: http://www.fefe.de/dietlibc/ +%if !0%{?snapshot:1} Source0: http://www.kernel.org/pub/linux/libs/dietlibc/%name-%version.tar.bz2 Source1: http://www.fefe.de/dietlibc/%name-%version.tar.bz2.sig +%else +# generated by 'make cvs-sources [CVS_DATE=....]' +Source0: %name-%version.%snapshot.tar.bz2 +%endif +Source10: runtests-X.sh Patch1: dietlibc-0.28-setpriority.patch Patch10: dietlibc-0.29-scall.patch Patch20: dietlibc-0.29-nostackprotector.patch @@ -40,6 +48,9 @@ Patch30: dietlibc-0.30-longdouble.patch Patch31: dietlibc-0.31-defpath.patch Patch32: dietlibc-0.31-stacksmash.patch Patch33: dietlibc-0.31-stacksmash-dyn.patch +Patch34: dietlibc-0.31.20080212-printffmt.patch +Patch40: dietlibc-0.31-printftest.patch +Patch41: dietlibc-0.31.20080212-teststdout.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dyn:Requires: dietlibc-lib = %version-%release} %{!?with_dyn:Obsoletes: dietlibc-lib < %version-%release} @@ -66,13 +77,17 @@ This package contains the dynamic libraries for dietlibc. %prep -%setup -q +%setup -q %{?snapshot:-n %name-%version.%snapshot} %patch1 -p1 -b .nice %patch10 -p1 -b .scall %patch30 -p1 -b .longdouble %patch31 -p1 -b .defpath %patch32 -p1 -b .stacksmash %patch33 -p1 -b .stacksmash-dyn +%patch34 -p1 -b .printffmt + +%patch40 -p1 -b .printftest +%patch41 -p1 -b .teststdout %ifnarch i386 x86_64 %patch20 -p1 -b .nostackprotector @@ -85,10 +100,14 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; sed -i -e 's!strip !: !g' Makefile -%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os +%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -O0 -g3 %global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags" PDIET=%_libdir/dietlibc %global makeflags %basemakeflags +for i in `find test -name 'runtests.sh'`; do + ln -s %SOURCE10 `dirname $i`/runtests-X.sh +done + %build make %makeflags all %{?_smp_mflags} @@ -109,6 +128,15 @@ chmod a-x $RPM_BUILD_ROOT%_libdir/dietlibc/lib-*/*.o rm -f $RPM_BUILD_ROOT%_bindir/dnsd +%check +make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) +make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) + +cd test +ulimit -m $[ 50*1024 ] -v $[ 100*1024 ] -d $[ 50*1024 ] +bash ./runtests-X.sh || : + + %clean rm -rf $RPM_BUILD_ROOT @@ -132,6 +160,12 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Wed Feb 13 2008 Enrico Scholz - 0.31-1.20080212 +- updated to CVS snapshot 20080212 +- fixed printf regression for '%+04i' style formats +- added %%check and run a testsuite; it does not succeed now so it is + for informational purposes only... + * Sat Sep 1 2007 Enrico Scholz - 0.31-1 - updated to 0.31 - removed the no-stack-protector bits for i386 and x86_64 archs From 440d112a50f769a9f61a842c167af22aecfc31b1 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:13:48 +0000 Subject: [PATCH 06/65] fixup status output; made it a bash script --- runtests-X.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/runtests-X.sh b/runtests-X.sh index 24037c1..abfc78d 100644 --- a/runtests-X.sh +++ b/runtests-X.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash eval $(grep '^\(TESTPROGRAMS\|SUBDIRS\)=' runtests.sh) @@ -10,13 +10,14 @@ export RUNTEST_INDENT for p in $TESTPROGRAMS; do ! tty -s || printf '%*s%-20s' $RUNTEST_INDENT '' "$p" ./$p >/dev/null && res='OK' || { res='FAIL'; let ++rc; } + ! tty -s || printf '\r' - printf '\r%*s%-20s%s\n' $RUNTEST_INDENT '' "$p" "$res" + printf '%*s%-20s%s\n' $RUNTEST_INDENT '' "$p" "$res" done test $rc -eq 0 || \ printf "%*s--> %u tests failed\n" $RUNTEST_INDENT '' $rc - + for d in $SUBDIRS; do echo "--- entering directory $d ---" let RUNTEST_INDENT+=2 From b1c14b3c8da054f752dbb5f8f3fbe5dc710b9bfd Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:23:09 +0000 Subject: [PATCH 07/65] use --with dynamic + --with ssp constructs --- dietlibc.spec | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 274202a..2677598 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -1,20 +1,21 @@ ## $Id: dietlibc.spec,v 1.3 2005/02/01 12:03:17 ensc Exp $ ## This package understands the following switches: +## --with[out] ssp ... enable/disable SSP; default depends +## on target architecture +## --with dynamic ... enable dynamic lib support -## Fedora Extras specific customization below... -## %global snapshot 20080212 -%ifarch %ix86 x86_64 arm -%global do_dyn 0 +%ifarch %ix86 x86_64 +%bcond_without ssp %else -%global do_dyn 0 +%bcond_with ssp %endif -%if %do_dyn -%global with_dyn 1 +%ifarch %ix86 x86_64 arm +%bcond_with dynamic %endif %ifarch %ix86 @@ -23,7 +24,6 @@ %global target_cpu %_target_cpu %endif - %{!?release_func:%global release_func() %1%{?dist}} Summary: Small libc implementation @@ -52,8 +52,8 @@ Patch34: dietlibc-0.31.20080212-printffmt.patch Patch40: dietlibc-0.31-printftest.patch Patch41: dietlibc-0.31.20080212-teststdout.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot -%{?with_dyn:Requires: dietlibc-lib = %version-%release} -%{!?with_dyn:Obsoletes: dietlibc-lib < %version-%release} +%{?with_dynamic:Requires: dietlibc-lib = %version-%release} +%{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} %package lib @@ -89,7 +89,7 @@ This package contains the dynamic libraries for dietlibc. %patch40 -p1 -b .printftest %patch41 -p1 -b .teststdout -%ifnarch i386 x86_64 +%if %{without ssp} %patch20 -p1 -b .nostackprotector sed -i -e 's!^#define WANT_SSP$!// \0!g; s!.*\(#define WANT_STACKGAP\).*!\1!g' dietfeatures.h @@ -100,7 +100,7 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; sed -i -e 's!strip !: !g' Makefile -%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -O0 -g3 +%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os %global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags" PDIET=%_libdir/dietlibc %global makeflags %basemakeflags @@ -113,7 +113,7 @@ done make %makeflags all %{?_smp_mflags} # 'dyn' target is not SMP safe -%{?with_dyn:make %makeflags dyn} +%{?with_dynamic:make %makeflags dyn} %install @@ -129,8 +129,8 @@ rm -f $RPM_BUILD_ROOT%_bindir/dnsd %check -make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) -make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) +make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) -k || : +make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) || : cd test ulimit -m $[ 50*1024 ] -v $[ 100*1024 ] -d $[ 50*1024 ] @@ -142,14 +142,14 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) -%{?with_dyn:%exclude %_libdir/dietlibc/*/*.so} +%{?with_dynamic:%exclude %_libdir/dietlibc/*/*.so} %doc AUTHOR BUGS CAVEAT CHANGES COPYING FAQ PORTING README* %doc SECURITY THANKS TODO %doc %_mandir/*/* %_bindir/* %_libdir/dietlibc -%if %do_dyn +%if %{with dynamic} %files lib %defattr(-,root,root,-) %config(noreplace) %_sysconfdir/* From b0ae7bf11b049224843c310a01cd9d509bab0c13 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:24:17 +0000 Subject: [PATCH 08/65] added temporary code to trace down ppc problems --- dietlibc.spec | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dietlibc.spec b/dietlibc.spec index 2677598..e0215c3 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -55,6 +55,9 @@ BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} +#### HACK!! +BuildRequires: strace + %package lib Summary: Dynamic libraries for dietlibc @@ -110,6 +113,13 @@ done %build +make %makeflags all %{?_smp_mflags} || : + + +### HACK: just for debugging ppc* issues +strace -f bin-ppc/diet true +objdump -dS bin-ppc/diet + make %makeflags all %{?_smp_mflags} # 'dyn' target is not SMP safe From 62e8fcf646330c158f4db8c43507778a09b14933 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:25:47 +0000 Subject: [PATCH 09/65] further tests... --- dietlibc.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index e0215c3..35595c5 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -117,7 +117,7 @@ make %makeflags all %{?_smp_mflags} || : ### HACK: just for debugging ppc* issues -strace -f bin-ppc/diet true +strace -f -s9999 bin-ppc/diet gcc -D__dietlibc__ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector -Os -o bin-ppc/dnsd contrib/dnsd.c || : objdump -dS bin-ppc/diet make %makeflags all %{?_smp_mflags} From 8076590c55c3f9783fa1f774611c323f3677c44f Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:27:01 +0000 Subject: [PATCH 10/65] further hacks... --- dietlibc.spec | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 35595c5..398a8bb 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -103,7 +103,7 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; sed -i -e 's!strip !: !g' Makefile -%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os +%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 %global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags" PDIET=%_libdir/dietlibc %global makeflags %basemakeflags @@ -113,13 +113,44 @@ done %build -make %makeflags all %{?_smp_mflags} || : +set +e +make %makeflags all %{?_smp_mflags} ### HACK: just for debugging ppc* issues -strace -f -s9999 bin-ppc/diet gcc -D__dietlibc__ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector -Os -o bin-ppc/dnsd contrib/dnsd.c || : -objdump -dS bin-ppc/diet +objdir=bin-%{target_cpu} +objdump -dS $objdir/diet +strace -s9999 $objdir/diet gcc -D__dietlibc__ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector -Os -o $objdir/dnsd contrib/dnsd.c + +cat >/tmp/gdb.cmd < Date: Sat, 21 Jun 2008 13:28:09 +0000 Subject: [PATCH 11/65] BR gdb --- dietlibc.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index 398a8bb..3640366 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -56,7 +56,7 @@ BuildRoot: %_tmppath/%name-%version-%release-buildroot %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} #### HACK!! -BuildRequires: strace +BuildRequires: strace gdb %package lib From 1bf67bf820de2d15c23183d860ee233c34259f0b Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:29:30 +0000 Subject: [PATCH 12/65] added strlen patch; build testsuite with -fno-builtin --- dietlibc-0.31.20080212-strlen.patch | 229 ++++++++++++++++++++++++++++ dietlibc.spec | 8 +- 2 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 dietlibc-0.31.20080212-strlen.patch diff --git a/dietlibc-0.31.20080212-strlen.patch b/dietlibc-0.31.20080212-strlen.patch new file mode 100644 index 0000000..c9712c7 --- /dev/null +++ b/dietlibc-0.31.20080212-strlen.patch @@ -0,0 +1,229 @@ +diff -upN dietlibc-0.31.20080212/x86_64/strlen.c.strlen dietlibc-0.31.20080212/x86_64/strlen.c +--- dietlibc-0.31.20080212/x86_64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 ++++ dietlibc-0.31.20080212/x86_64/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-#include "alpha/strlen.c" +diff -upN dietlibc-0.31.20080212/test/string/strlen.c.strlen dietlibc-0.31.20080212/test/string/strlen.c +--- dietlibc-0.31.20080212/test/string/strlen.c.strlen 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 17:23:25.000000000 +0100 +@@ -2,9 +2,24 @@ + #include + + int main() { +- const char* x="foo bar baz"; ++ /* make it large enough to test all possible alignments, number of trailing ++ * bytes and word sizes */ ++ char x[33]= { [0] = '\0' }; ++ ++ size_t i, j, k; + assert(strlen("")==0); +- assert(strlen(x)==11); +- assert(strlen(x+5)==6); ++ ++ /* run it twice; during first run, all trailing bytes are \0. In second run, ++ * they are initialized to non \0 */ ++ for (k=0; k<2; ++k) { ++ for (j=0; j<32; ++j) { ++ x[j] = j%10 + '0'; ++ x[j+1] = '\0'; ++ ++ for (i=0; i<=j; ++i) ++ assert(strlen(x+i)==j+1-i); ++ } ++ } ++ + return 0; + } +diff -upN dietlibc-0.31.20080212/test/strlen.c.strlen dietlibc-0.31.20080212/test/strlen.c +--- dietlibc-0.31.20080212/test/strlen.c.strlen 2007-11-17 15:29:53.000000000 +0100 ++++ dietlibc-0.31.20080212/test/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,11 +0,0 @@ +-#include +-#include +- +-int main() { +- const char* x="foo bar baz"; +- size_t i; +- assert(strlen("")==0); +- for (i=0; i<11; ++i) +- assert(strlen(x+i)==11-i); +- return 0; +-} +diff -upN dietlibc-0.31.20080212/test/Makefile.strlen dietlibc-0.31.20080212/test/Makefile +--- dietlibc-0.31.20080212/test/Makefile.strlen 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080212/test/Makefile 2008-02-14 17:24:12.000000000 +0100 +@@ -13,7 +13,7 @@ gethostbyname_r getmntent getopt getpass + glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ + memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest \ + protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ +-speed spent sprintf sscanf stdarg strcasecmp strcmp strlen strncat strncpy strptime strrchr \ ++speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ + strstr strtol sysenter ungetc waitpid + + test: $(TESTPROGRAMS) +diff -upN dietlibc-0.31.20080212/test/runtests.sh.strlen dietlibc-0.31.20080212/test/runtests.sh +--- dietlibc-0.31.20080212/test/runtests.sh.strlen 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080212/test/runtests.sh 2008-02-14 17:24:01.000000000 +0100 +@@ -1,6 +1,6 @@ + SUBDIRS="dirent inet stdio string stdlib time" + +-TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strlen strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" ++TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" + + STDIN="read1" + PASS="getpass" +diff -upN dietlibc-0.31.20080212/sparc64/strlen.c.strlen dietlibc-0.31.20080212/sparc64/strlen.c +--- dietlibc-0.31.20080212/sparc64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 ++++ dietlibc-0.31.20080212/sparc64/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-#include "alpha/strlen.c" +diff -upN dietlibc-0.31.20080212/ppc64/strlen.c.strlen dietlibc-0.31.20080212/ppc64/strlen.c +--- dietlibc-0.31.20080212/ppc64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 ++++ dietlibc-0.31.20080212/ppc64/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-#include "alpha/strlen.c" +diff -upN dietlibc-0.31.20080212/lib/strstr.c.strlen dietlibc-0.31.20080212/lib/strstr.c +--- dietlibc-0.31.20080212/lib/strstr.c.strlen 2003-08-19 21:34:18.000000000 +0200 ++++ dietlibc-0.31.20080212/lib/strstr.c 2008-02-14 16:40:23.000000000 +0100 +@@ -4,7 +4,7 @@ + char *strstr(const char *haystack, const char *needle) { + size_t nl=strlen(needle); + size_t hl=strlen(haystack); +- int i; ++ size_t i; + if (!nl) goto found; + if (nl>hl) return 0; + for (i=hl-nl+1; __likely(i); --i) { +diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/strlen.c +--- dietlibc-0.31.20080212/lib/strlen.c.strlen 2003-08-19 21:34:18.000000000 +0200 ++++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 17:06:39.000000000 +0100 +@@ -1,6 +1,7 @@ + #include + #include "dietfeatures.h" + #include ++#include + + #ifdef WANT_SMALL_STRING_ROUTINES + size_t strlen(const char *s) { +@@ -10,38 +11,64 @@ size_t strlen(const char *s) { + return i; + } + #else +-static const unsigned long magic = 0x01010101; ++ ++#if __WORDSIZE == 64 ++typedef uint64_t word_t; ++static word_t const magic = 0x0101010101010101ull; ++#elif __WORDSIZE == 32 ++typedef uint32_t word_t; ++static word_t const magic = 0x01010101u; ++#else ++#error unsupported __WORDSIZE ++#endif + + size_t strlen(const char *s) + { + const char *t = s; +- unsigned long word; ++ word_t word; + + if (!s) return 0; + + /* Byte compare up until word boundary */ +- for (; ((unsigned long) t & 3); t++) ++ for (; ((unsigned long) t & (sizeof(magic)-1)); t++) + if (!*t) return t - s; + + /* Word compare */ + do { +- word = *((unsigned long *) t); t += 4; ++ word = *((word_t const *) t); t += sizeof word; + word = (word - magic) &~ word; + word &= (magic << 7); + } while (__likely(word == 0)); + +-#if BYTE_ORDER == LITTLE_ENDIAN +- /* word & 0x80808080 == word */ +- word = (word - 1) & (magic << 10); +- word += (word << 8) + (word << 16); +- t += word >> 26; ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++ ++ if (sizeof(word)==8) { ++ /* word & 0x8080808080808080 == word */ ++ word = (word - 1) & (magic << 8); ++ word += (word << 32); ++ word += (word << 16); ++ word += (word << 8); ++ t += word >> 56; ++ } else if (sizeof(word)==4) { ++ /* word & 0x80808080 == word */ ++ word = (word - 1) & (magic << 10); ++ word += (word << 8) + (word << 16); ++ t += word >> 26; ++ } ++ + #else +- if ((word & 0x80800000) == 0) { +- word <<= 16; ++ ++ if (sizeof(word)>=8 && (word & 0x8080808000000000ull) == 0) ++ t += 4; ++ ++ if (sizeof(word)>=4 && (word & 0x80800000u) == 0) + t += 2; +- } +- if ((word & 0x80000000) == 0) t += 1; +-#endif +- return ((const char *) t) - 4 - s; ++ ++ if (sizeof(word)>=2 && (word & 0x8000u) == 0) ++ t += 1; ++ ++#endif /* __BYTE_ORDER */ ++ ++ return t - sizeof(word) - s; + } +-#endif ++#endif /* WANT_SMALL_STRING_ROUTINES */ +diff -upN dietlibc-0.31.20080212/ia64/strlen.c.strlen dietlibc-0.31.20080212/ia64/strlen.c +--- dietlibc-0.31.20080212/ia64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 ++++ dietlibc-0.31.20080212/ia64/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-#include "alpha/strlen.c" +diff -upN dietlibc-0.31.20080212/alpha/strlen.c.strlen dietlibc-0.31.20080212/alpha/strlen.c +--- dietlibc-0.31.20080212/alpha/strlen.c.strlen 2001-01-09 18:57:38.000000000 +0100 ++++ dietlibc-0.31.20080212/alpha/strlen.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-#include +- +-static const unsigned long long magic = 0x0101010101010101LL; +- +-size_t strlen(const char *s) +-{ +- const char *t = s; +- unsigned long long word; +- +- if (!s) return 0; +- +- /* Byte compare up until 64 bit word boundary */ +- for (; ((unsigned long long) t & 7); t++) +- if (!*t) return t - s; +- +- /* Word compare */ +- do { +- word = *((unsigned long long *) t); t += 8; +- word = (word - magic) &~ word; +- word &= (magic << 7); +- } while (word == 0); +- +- /* word & 0x8080808080808080 == word */ +- word = (word - 1) & (magic << 8); +- word += (word << 32); +- word += (word << 16); +- word += (word << 8); +- t += word >> 56; +- return ((const char *) t) - 8 - s; +-} +- +- diff --git a/dietlibc.spec b/dietlibc.spec index 3640366..28854a3 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -51,6 +51,7 @@ Patch33: dietlibc-0.31-stacksmash-dyn.patch Patch34: dietlibc-0.31.20080212-printffmt.patch Patch40: dietlibc-0.31-printftest.patch Patch41: dietlibc-0.31.20080212-teststdout.patch +Patch42: dietlibc-0.31.20080212-strlen.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -91,6 +92,8 @@ This package contains the dynamic libraries for dietlibc. %patch40 -p1 -b .printftest %patch41 -p1 -b .teststdout +%patch42 -p1 -b .strlen + %if %{without ssp} %patch20 -p1 -b .nostackprotector @@ -104,7 +107,7 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; sed -i -e 's!strip !: !g' Makefile %global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 -%global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags" PDIET=%_libdir/dietlibc +%global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags $XTRA_CFLAGS" PDIET=%_libdir/dietlibc %global makeflags %basemakeflags for i in `find test -name 'runtests.sh'`; do @@ -147,7 +150,7 @@ up info locals quit EOF -gdb --batch -x /tmp/gdb.cmd $objdir/diet +gdb --batch -x /tmp/gdb.cmd $objdir/diet < /dev/null set -e @@ -170,6 +173,7 @@ rm -f $RPM_BUILD_ROOT%_bindir/dnsd %check +XTRA_CFLAGS='-fno-builtin' make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) -k || : make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) || : From c9e2805de8755fd83de9ff16669cf4695e57f5d7 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:30:39 +0000 Subject: [PATCH 13/65] fixed strlen patch --- dietlibc-0.31.20080212-strlen.patch | 107 ++++++++++++++++++---------- 1 file changed, 68 insertions(+), 39 deletions(-) diff --git a/dietlibc-0.31.20080212-strlen.patch b/dietlibc-0.31.20080212-strlen.patch index c9712c7..0b179ca 100644 --- a/dietlibc-0.31.20080212-strlen.patch +++ b/dietlibc-0.31.20080212-strlen.patch @@ -5,31 +5,42 @@ diff -upN dietlibc-0.31.20080212/x86_64/strlen.c.strlen dietlibc-0.31.20080212/x -#include "alpha/strlen.c" diff -upN dietlibc-0.31.20080212/test/string/strlen.c.strlen dietlibc-0.31.20080212/test/string/strlen.c --- dietlibc-0.31.20080212/test/string/strlen.c.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 17:23:25.000000000 +0100 -@@ -2,9 +2,24 @@ ++++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 18:32:57.000000000 +0100 +@@ -1,10 +1,35 @@ + #include #include ++#include ++ ++/* make it large enough to test all possible alignments, number of trailing ++ * bytes and word sizes */ ++#define BUFLEN (__WORDSIZE/8 * 4) int main() { - const char* x="foo bar baz"; -+ /* make it large enough to test all possible alignments, number of trailing -+ * bytes and word sizes */ -+ char x[33]= { [0] = '\0' }; ++ /* will hold the string, the trailing zero and a test pattern */ ++ char buf[BUFLEN + 1 + __WORDSIZE/8]; ++ size_t len; + -+ size_t i, j, k; assert(strlen("")==0); - assert(strlen(x)==11); - assert(strlen(x+5)==6); + -+ /* run it twice; during first run, all trailing bytes are \0. In second run, -+ * they are initialized to non \0 */ -+ for (k=0; k<2; ++k) { -+ for (j=0; j<32; ++j) { -+ x[j] = j%10 + '0'; -+ x[j+1] = '\0'; ++ for (len=0; len #include "dietfeatures.h" @@ -105,7 +116,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ #ifdef WANT_SMALL_STRING_ROUTINES size_t strlen(const char *s) { -@@ -10,38 +11,64 @@ size_t strlen(const char *s) { +@@ -10,38 +11,83 @@ size_t strlen(const char *s) { return i; } #else @@ -126,8 +137,10 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ const char *t = s; - unsigned long word; + word_t word; ++ word_t mask; - if (!s) return 0; +- if (!s) return 0; ++ if (__unlikely(!s)) return 0; /* Byte compare up until word boundary */ - for (; ((unsigned long) t & 3); t++) @@ -148,44 +161,60 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ - word += (word << 8) + (word << 16); - t += word >> 26; +#if __BYTE_ORDER == __LITTLE_ENDIAN -+ -+ if (sizeof(word)==8) { ++ switch (sizeof(word)) { ++ case 8: + /* word & 0x8080808080808080 == word */ + word = (word - 1) & (magic << 8); + word += (word << 32); + word += (word << 16); + word += (word << 8); + t += word >> 56; -+ } else if (sizeof(word)==4) { ++ break; ++ ++ case 4: + /* word & 0x80808080 == word */ + word = (word - 1) & (magic << 10); + word += (word << 8) + (word << 16); + t += word >> 26; ++ break; + } -+ #else - if ((word & 0x80800000) == 0) { - word <<= 16; +- t += 2; ++ /* results into 0x8080 0000 or 0x80808080 00000000 */ ++ mask = (magic << 7) & ~((1u<<(sizeof(magic)*8/2))-1); + -+ if (sizeof(word)>=8 && (word & 0x8080808000000000ull) == 0) -+ t += 4; ++ if (sizeof(word)>=8) { ++ if ((word & mask) == 0) { ++ t += 4; ++ word <<= 4*8; ++ } ++ ++ mask <<= 2*8; ++ } + -+ if (sizeof(word)>=4 && (word & 0x80800000u) == 0) - t += 2; -- } ++ if (sizeof(word)>=4) { ++ if ((word & mask) == 0) { ++ t += 2; ++ word <<= 2*8; ++ } ++ ++ mask <<= 1*8; ++ } ++ ++ if (sizeof(word)>=2) { ++ if ((word & mask) == 0) { ++ t += 1; ++ word <<= 1*8; ++ } + } - if ((word & 0x80000000) == 0) t += 1; --#endif + #endif - return ((const char *) t) - 4 - s; -+ -+ if (sizeof(word)>=2 && (word & 0x8000u) == 0) -+ t += 1; -+ -+#endif /* __BYTE_ORDER */ -+ + return t - sizeof(word) - s; } --#endif -+#endif /* WANT_SMALL_STRING_ROUTINES */ + #endif diff -upN dietlibc-0.31.20080212/ia64/strlen.c.strlen dietlibc-0.31.20080212/ia64/strlen.c --- dietlibc-0.31.20080212/ia64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 +++ dietlibc-0.31.20080212/ia64/strlen.c 1970-01-01 01:00:00.000000000 +0100 From 6ec9567eba13e0df922267f6d3bb50a30526b04c Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:31:53 +0000 Subject: [PATCH 14/65] further strlen fixes... --- dietlibc-0.31.20080212-strlen.patch | 42 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/dietlibc-0.31.20080212-strlen.patch b/dietlibc-0.31.20080212-strlen.patch index 0b179ca..e012463 100644 --- a/dietlibc-0.31.20080212-strlen.patch +++ b/dietlibc-0.31.20080212-strlen.patch @@ -5,7 +5,7 @@ diff -upN dietlibc-0.31.20080212/x86_64/strlen.c.strlen dietlibc-0.31.20080212/x -#include "alpha/strlen.c" diff -upN dietlibc-0.31.20080212/test/string/strlen.c.strlen dietlibc-0.31.20080212/test/string/strlen.c --- dietlibc-0.31.20080212/test/string/strlen.c.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 18:32:57.000000000 +0100 ++++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 20:01:08.000000000 +0100 @@ -1,10 +1,35 @@ #include #include @@ -62,7 +62,7 @@ diff -upN dietlibc-0.31.20080212/test/strlen.c.strlen dietlibc-0.31.20080212/tes -} diff -upN dietlibc-0.31.20080212/test/Makefile.strlen dietlibc-0.31.20080212/test/Makefile --- dietlibc-0.31.20080212/test/Makefile.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/Makefile 2008-02-14 17:26:39.000000000 +0100 ++++ dietlibc-0.31.20080212/test/Makefile 2008-02-14 20:01:08.000000000 +0100 @@ -13,7 +13,7 @@ gethostbyname_r getmntent getopt getpass glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest \ @@ -74,7 +74,7 @@ diff -upN dietlibc-0.31.20080212/test/Makefile.strlen dietlibc-0.31.20080212/tes test: $(TESTPROGRAMS) diff -upN dietlibc-0.31.20080212/test/runtests.sh.strlen dietlibc-0.31.20080212/test/runtests.sh --- dietlibc-0.31.20080212/test/runtests.sh.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/runtests.sh 2008-02-14 17:26:39.000000000 +0100 ++++ dietlibc-0.31.20080212/test/runtests.sh 2008-02-14 20:01:08.000000000 +0100 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -95,7 +95,7 @@ diff -upN dietlibc-0.31.20080212/ppc64/strlen.c.strlen dietlibc-0.31.20080212/pp -#include "alpha/strlen.c" diff -upN dietlibc-0.31.20080212/lib/strstr.c.strlen dietlibc-0.31.20080212/lib/strstr.c --- dietlibc-0.31.20080212/lib/strstr.c.strlen 2003-08-19 21:34:18.000000000 +0200 -+++ dietlibc-0.31.20080212/lib/strstr.c 2008-02-14 17:26:39.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strstr.c 2008-02-14 20:01:08.000000000 +0100 @@ -4,7 +4,7 @@ char *strstr(const char *haystack, const char *needle) { size_t nl=strlen(needle); @@ -107,7 +107,7 @@ diff -upN dietlibc-0.31.20080212/lib/strstr.c.strlen dietlibc-0.31.20080212/lib/ for (i=hl-nl+1; __likely(i); --i) { diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/strlen.c --- dietlibc-0.31.20080212/lib/strlen.c.strlen 2003-08-19 21:34:18.000000000 +0200 -+++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 19:59:19.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 21:27:31.000000000 +0100 @@ -1,6 +1,7 @@ #include #include "dietfeatures.h" @@ -116,7 +116,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ #ifdef WANT_SMALL_STRING_ROUTINES size_t strlen(const char *s) { -@@ -10,38 +11,83 @@ size_t strlen(const char *s) { +@@ -10,38 +11,87 @@ size_t strlen(const char *s) { return i; } #else @@ -124,13 +124,13 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ + +#if __WORDSIZE == 64 +typedef uint64_t word_t; -+static word_t const magic = 0x0101010101010101ull; +#elif __WORDSIZE == 32 +typedef uint32_t word_t; -+static word_t const magic = 0x01010101u; +#else +#error unsupported __WORDSIZE +#endif ++ ++static word_t const magic = (word_t)(0x0101010101010101ull); size_t strlen(const char *s) { @@ -177,37 +177,41 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ + word += (word << 8) + (word << 16); + t += word >> 26; + break; ++ ++ default: { char exc[sizeof(word)==8]; } + } #else - if ((word & 0x80800000) == 0) { - word <<= 16; - t += 2; -+ /* results into 0x8080 0000 or 0x80808080 00000000 */ -+ mask = (magic << 7) & ~((1u<<(sizeof(magic)*8/2))-1); ++ mask = (magic << 7); + -+ if (sizeof(word)>=8) { ++ switch (sizeof(word)) { ++ case 8: ++ mask <<= 4*8; + if ((word & mask) == 0) { + t += 4; + word <<= 4*8; + } -+ -+ mask <<= 2*8; -+ } ++ /* fallthrough */ + -+ if (sizeof(word)>=4) { ++ case 4: ++ mask <<= 2*8; + if ((word & mask) == 0) { + t += 2; + word <<= 2*8; + } -+ -+ mask <<= 1*8; -+ } ++ /* fallthrough */ + -+ if (sizeof(word)>=2) { ++ case 2: ++ mask <<= 1*8; + if ((word & mask) == 0) { + t += 1; + word <<= 1*8; + } ++ break; ++ ++ default: { char exc[sizeof(word)==8]; } } - if ((word & 0x80000000) == 0) t += 1; #endif From 9776bedc72d19930ce856af07d6ae451dc684bff Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:33:05 +0000 Subject: [PATCH 15/65] avoid compiler warnings --- dietlibc-0.31.20080212-strlen.patch | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dietlibc-0.31.20080212-strlen.patch b/dietlibc-0.31.20080212-strlen.patch index e012463..eca2a3e 100644 --- a/dietlibc-0.31.20080212-strlen.patch +++ b/dietlibc-0.31.20080212-strlen.patch @@ -107,7 +107,7 @@ diff -upN dietlibc-0.31.20080212/lib/strstr.c.strlen dietlibc-0.31.20080212/lib/ for (i=hl-nl+1; __likely(i); --i) { diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/strlen.c --- dietlibc-0.31.20080212/lib/strlen.c.strlen 2003-08-19 21:34:18.000000000 +0200 -+++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 21:27:31.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 21:31:09.000000000 +0100 @@ -1,6 +1,7 @@ #include #include "dietfeatures.h" @@ -116,7 +116,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ #ifdef WANT_SMALL_STRING_ROUTINES size_t strlen(const char *s) { -@@ -10,38 +11,87 @@ size_t strlen(const char *s) { +@@ -10,38 +11,88 @@ size_t strlen(const char *s) { return i; } #else @@ -161,6 +161,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ - word += (word << 8) + (word << 16); - t += word >> 26; +#if __BYTE_ORDER == __LITTLE_ENDIAN ++ (void)mask; + switch (sizeof(word)) { + case 8: + /* word & 0x8080808080808080 == word */ @@ -178,7 +179,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ + t += word >> 26; + break; + -+ default: { char exc[sizeof(word)==8]; } ++ default: { char exc[sizeof(word)==8]; (void)exc; } + } #else - if ((word & 0x80800000) == 0) { @@ -211,7 +212,7 @@ diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/ + } + break; + -+ default: { char exc[sizeof(word)==8]; } ++ default: { char exc[sizeof(word)==8]; (void)exc; } } - if ((word & 0x80000000) == 0) t += 1; #endif From ae21b491f05f0cfbcc3841c8c8ecbac880b7938d Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:34:29 +0000 Subject: [PATCH 16/65] added ulong patch --- dietlibc-0.31.20080212-ulong.patch | 26 ++++++++++++++++++++++++++ dietlibc.spec | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 dietlibc-0.31.20080212-ulong.patch diff --git a/dietlibc-0.31.20080212-ulong.patch b/dietlibc-0.31.20080212-ulong.patch new file mode 100644 index 0000000..89bf8f7 --- /dev/null +++ b/dietlibc-0.31.20080212-ulong.patch @@ -0,0 +1,26 @@ +diff -upN dietlibc-0.31.20080212/lib/strcpy.c.~1~ dietlibc-0.31.20080212/lib/strcpy.c +--- dietlibc-0.31.20080212/lib/strcpy.c.~1~ 2003-12-21 13:06:36.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcpy.c 2008-02-14 21:36:45.000000000 +0100 +@@ -25,7 +25,7 @@ strcpy (char *s1, const char *s2) + + while (1) { + l = *(const unsigned long *) s2; +- if (((l - MKW(0x1)) & ~l) & MKW(0x80)) { ++ if (((l - MKW(0x1ul)) & ~l) & MKW(0x80ul)) { + unsigned char c; + while ((*s1++ = (l & 0xff))) l>>=8; + return (res); +diff -upN dietlibc-0.31.20080212/lib/strcmp.c.~1~ dietlibc-0.31.20080212/lib/strcmp.c +--- dietlibc-0.31.20080212/lib/strcmp.c.~1~ 2003-12-21 13:06:36.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 21:37:38.000000000 +0100 +@@ -31,8 +31,8 @@ strcmp (const char *s1, const char *s2) + while (1) { + l1 = *lx1++; + l2 = *lx2++; +- if ((((l1 - MKW(0x1)) & ~l1) & MKW(0x80)) || +- ((((l2 - MKW(0x1)) & ~l2) & MKW(0x80))) || l1 != l2) { ++ if ((((l1 - MKW(0x1ul)) & ~l1) & MKW(0x80ul)) || ++ ((((l2 - MKW(0x1ul)) & ~l2) & MKW(0x80ul))) || l1 != l2) { + unsigned char c1, c2; + while (1) { + c1 = l1 & 0xff; diff --git a/dietlibc.spec b/dietlibc.spec index 28854a3..01653d4 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -52,6 +52,7 @@ Patch34: dietlibc-0.31.20080212-printffmt.patch Patch40: dietlibc-0.31-printftest.patch Patch41: dietlibc-0.31.20080212-teststdout.patch Patch42: dietlibc-0.31.20080212-strlen.patch +Patch43: dietlibc-0.31.20080212-ulong.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -93,6 +94,7 @@ This package contains the dynamic libraries for dietlibc. %patch40 -p1 -b .printftest %patch41 -p1 -b .teststdout %patch42 -p1 -b .strlen +%patch43 -p1 -b .ulong %if %{without ssp} From 5646d0fd663da7aea8a43cb4a9bed28ca1e94990 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:36:26 +0000 Subject: [PATCH 17/65] fixed big-endian problems in strcpy + strcmp --- dietlibc-0.31.20080212-strend.patch | 53 +++++++++++++++++++++++++++++ dietlibc.spec | 2 ++ 2 files changed, 55 insertions(+) create mode 100644 dietlibc-0.31.20080212-strend.patch diff --git a/dietlibc-0.31.20080212-strend.patch b/dietlibc-0.31.20080212-strend.patch new file mode 100644 index 0000000..2fad801 --- /dev/null +++ b/dietlibc-0.31.20080212-strend.patch @@ -0,0 +1,53 @@ +diff -upN dietlibc-0.31.20080212/lib/strcpy.c.~1~ dietlibc-0.31.20080212/lib/strcpy.c +--- dietlibc-0.31.20080212/lib/strcpy.c.~1~ 2008-02-14 21:51:56.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcpy.c 2008-02-14 22:45:56.000000000 +0100 +@@ -26,8 +26,7 @@ strcpy (char *s1, const char *s2) + while (1) { + l = *(const unsigned long *) s2; + if (((l - MKW(0x1ul)) & ~l) & MKW(0x80ul)) { +- unsigned char c; +- while ((*s1++ = (l & 0xff))) l>>=8; ++ while ((*s1++ = GFC(l))) INCSTR(l); + return (res); + } + *(unsigned long *) s1 = l; +diff -upN dietlibc-0.31.20080212/lib/strcmp.c.~1~ dietlibc-0.31.20080212/lib/strcmp.c +--- dietlibc-0.31.20080212/lib/strcmp.c.~1~ 2008-02-14 21:51:56.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 22:44:44.000000000 +0100 +@@ -35,12 +35,12 @@ strcmp (const char *s1, const char *s2) + ((((l2 - MKW(0x1ul)) & ~l2) & MKW(0x80ul))) || l1 != l2) { + unsigned char c1, c2; + while (1) { +- c1 = l1 & 0xff; +- c2 = l2 & 0xff; ++ c1 = GFC(l1); ++ c2 = GFC(l2); + if (!c1 || c1 != c2) + return (c1 - c2); +- l1 >>= 8; +- l2 >>= 8; ++ INCSTR(l1); ++ INCSTR(l2); + } + } + } +diff -upN dietlibc-0.31.20080212/dietstring.h.~1~ dietlibc-0.31.20080212/dietstring.h +--- dietlibc-0.31.20080212/dietstring.h.~1~ 2003-12-21 13:06:36.000000000 +0100 ++++ dietlibc-0.31.20080212/dietstring.h 2008-02-14 22:45:56.000000000 +0100 +@@ -11,6 +11,16 @@ + # define STRALIGN(x) (((unsigned long)x&3)?4-((unsigned long)x&3):0) + #endif + ++/* GFC(x) - returns first character */ ++/* INCSTR(x) - moves to next character */ ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++# define GFC(x) ((x)&0xff) ++# define INCSTR(x) do { x >>= 8; } while (0) ++#else ++# define GFC(x) (((x)>>(sizeof(x)-8))&0xff) ++# define INCSTR(x) do { x <<= 8; } while (0) ++#endif ++ + #define UNALIGNED(x,y) (((unsigned long)x & (sizeof (unsigned long)-1)) ^ ((unsigned long)y & (sizeof (unsigned long)-1))) + + #endif /* _DIET_STRING_H_ */ diff --git a/dietlibc.spec b/dietlibc.spec index 01653d4..43ee7cd 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -53,6 +53,7 @@ Patch40: dietlibc-0.31-printftest.patch Patch41: dietlibc-0.31.20080212-teststdout.patch Patch42: dietlibc-0.31.20080212-strlen.patch Patch43: dietlibc-0.31.20080212-ulong.patch +Patch44: dietlibc-0.31.20080212-strend.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -95,6 +96,7 @@ This package contains the dynamic libraries for dietlibc. %patch41 -p1 -b .teststdout %patch42 -p1 -b .strlen %patch43 -p1 -b .ulong +%patch44 -p1 -b .strend %if %{without ssp} From eb805d8f684dce56e9e3a00b3534ad30b61767a5 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:37:57 +0000 Subject: [PATCH 18/65] further fixes --- dietlibc-0.31.20080212-strend.patch | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dietlibc-0.31.20080212-strend.patch b/dietlibc-0.31.20080212-strend.patch index 2fad801..6b77750 100644 --- a/dietlibc-0.31.20080212-strend.patch +++ b/dietlibc-0.31.20080212-strend.patch @@ -1,6 +1,6 @@ -diff -upN dietlibc-0.31.20080212/lib/strcpy.c.~1~ dietlibc-0.31.20080212/lib/strcpy.c ---- dietlibc-0.31.20080212/lib/strcpy.c.~1~ 2008-02-14 21:51:56.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/strcpy.c 2008-02-14 22:45:56.000000000 +0100 +diff -upN dietlibc-0.31.20080212/lib/strcpy.c.strend dietlibc-0.31.20080212/lib/strcpy.c +--- dietlibc-0.31.20080212/lib/strcpy.c.strend 2008-02-14 22:48:00.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcpy.c 2008-02-14 22:48:00.000000000 +0100 @@ -26,8 +26,7 @@ strcpy (char *s1, const char *s2) while (1) { l = *(const unsigned long *) s2; @@ -11,16 +11,16 @@ diff -upN dietlibc-0.31.20080212/lib/strcpy.c.~1~ dietlibc-0.31.20080212/lib/str return (res); } *(unsigned long *) s1 = l; -diff -upN dietlibc-0.31.20080212/lib/strcmp.c.~1~ dietlibc-0.31.20080212/lib/strcmp.c ---- dietlibc-0.31.20080212/lib/strcmp.c.~1~ 2008-02-14 21:51:56.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 22:44:44.000000000 +0100 +diff -upN dietlibc-0.31.20080212/lib/strcmp.c.strend dietlibc-0.31.20080212/lib/strcmp.c +--- dietlibc-0.31.20080212/lib/strcmp.c.strend 2008-02-14 22:48:00.000000000 +0100 ++++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 23:02:14.000000000 +0100 @@ -35,12 +35,12 @@ strcmp (const char *s1, const char *s2) ((((l2 - MKW(0x1ul)) & ~l2) & MKW(0x80ul))) || l1 != l2) { unsigned char c1, c2; while (1) { - c1 = l1 & 0xff; - c2 = l2 & 0xff; -+ c1 = GFC(l1); ++ c1 = GFC(l1); + c2 = GFC(l2); if (!c1 || c1 != c2) return (c1 - c2); @@ -31,9 +31,9 @@ diff -upN dietlibc-0.31.20080212/lib/strcmp.c.~1~ dietlibc-0.31.20080212/lib/str } } } -diff -upN dietlibc-0.31.20080212/dietstring.h.~1~ dietlibc-0.31.20080212/dietstring.h ---- dietlibc-0.31.20080212/dietstring.h.~1~ 2003-12-21 13:06:36.000000000 +0100 -+++ dietlibc-0.31.20080212/dietstring.h 2008-02-14 22:45:56.000000000 +0100 +diff -upN dietlibc-0.31.20080212/dietstring.h.strend dietlibc-0.31.20080212/dietstring.h +--- dietlibc-0.31.20080212/dietstring.h.strend 2003-12-21 13:06:36.000000000 +0100 ++++ dietlibc-0.31.20080212/dietstring.h 2008-02-14 23:03:51.000000000 +0100 @@ -11,6 +11,16 @@ # define STRALIGN(x) (((unsigned long)x&3)?4-((unsigned long)x&3):0) #endif @@ -44,7 +44,7 @@ diff -upN dietlibc-0.31.20080212/dietstring.h.~1~ dietlibc-0.31.20080212/dietstr +# define GFC(x) ((x)&0xff) +# define INCSTR(x) do { x >>= 8; } while (0) +#else -+# define GFC(x) (((x)>>(sizeof(x)-8))&0xff) ++# define GFC(x) (((x)>>(sizeof(x)*8-8))&0xff) +# define INCSTR(x) do { x <<= 8; } while (0) +#endif + From 3dab01d12730e2b18beb55e0774cbd08afa6e217 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:39:09 +0000 Subject: [PATCH 19/65] ok; was hard work, but it should build now... --- dietlibc.spec | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 43ee7cd..ebe222b 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -120,44 +120,6 @@ done %build -set +e -make %makeflags all %{?_smp_mflags} - - -### HACK: just for debugging ppc* issues -objdir=bin-%{target_cpu} -objdump -dS $objdir/diet - -strace -s9999 $objdir/diet gcc -D__dietlibc__ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector -Os -o $objdir/dnsd contrib/dnsd.c - -cat >/tmp/gdb.cmd < - 0.31-1 - updated to 0.31 From 24c467e92c15120243cf531407f59057d7b3ac60 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:40:43 +0000 Subject: [PATCH 20/65] - updated to CVS snapshot 20080221; removed most of the last patches as they are now in upstream --- dietlibc-0.31-printftest.patch | 46 ----- dietlibc-0.31.20080212-printffmt.patch | 33 ---- dietlibc-0.31.20080212-strend.patch | 53 ----- dietlibc-0.31.20080212-strlen.patch | 263 ------------------------- dietlibc-0.31.20080212-ulong.patch | 26 --- sources | 2 +- 6 files changed, 1 insertion(+), 422 deletions(-) delete mode 100644 dietlibc-0.31-printftest.patch delete mode 100644 dietlibc-0.31.20080212-printffmt.patch delete mode 100644 dietlibc-0.31.20080212-strend.patch delete mode 100644 dietlibc-0.31.20080212-strlen.patch delete mode 100644 dietlibc-0.31.20080212-ulong.patch diff --git a/dietlibc-0.31-printftest.patch b/dietlibc-0.31-printftest.patch deleted file mode 100644 index b0bb3b9..0000000 --- a/dietlibc-0.31-printftest.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -up dietlibc-0.31.20080212/test/printf.c.~1~ dietlibc-0.31.20080212/test/printf.c ---- dietlibc-0.31.20080212/test/printf.c.~1~ 2004-01-07 16:06:48.000000000 +0100 -+++ dietlibc-0.31.20080212/test/printf.c 2008-02-13 17:25:35.000000000 +0100 -@@ -38,7 +38,8 @@ - #define TEST_SNPRINTF(EXP,SZ, ...) \ - { \ - volatile char * args[] = { EXP, #SZ }; \ -- int test_sz=MIN((SZ),sizeof(EXP))-1; \ -+ ssize_t test_sz=MIN((SZ),sizeof(EXP))-1; \ -+ (void)args; \ - TEST_INIT(EXP); \ - rc=snprintf(buf+ALGN,(SZ),__VA_ARGS__); \ - TEST_CHECK(EXP, test_sz); \ -@@ -80,6 +80,7 @@ int main() - - TEST("foobar", "%s", "foobar"); - TEST("01.23", "%05.2f", 1.23); -+ TEST("001.2", "%05.2g", 1.23); - - TEST("42", "%i", 42); - TEST("", "%.0i", 0); -@@ -111,6 +112,24 @@ int main() - - TEST("0x1", "%#x", 1); - -+ TEST("abcX", "%2sX", "abc"); -+ TEST("abcX", "%-2sX", "abc"); -+ -+ TEST("001234", "%.6u", 1234); -+ TEST("-001234", "%.6i", -1234); -+ TEST(" 1234", "%6u", 1234); -+ TEST(" -1234", "%6i", -1234); -+ TEST("001234", "%06u", 1234); -+ TEST("-01234", "%06i", -1234); -+ TEST("1234 ", "%-6u", 1234); -+ TEST("-1234 ", "%-6i", -1234); -+ TEST("1234", "%.6s", "1234"); -+ TEST(" 1234", "%6s", "1234"); -+ TEST("1234 ", "%-6s", "1234"); -+ TEST(" 01234", "%6.5u", 1234); -+ TEST("-01234", "%6.5i", -1234); -+ TEST(" 1234", "%6.5s", "1234"); -+ - #ifdef XSI_TESTS - setlocale(LC_ALL, "de_DE"); - diff --git a/dietlibc-0.31.20080212-printffmt.patch b/dietlibc-0.31.20080212-printffmt.patch deleted file mode 100644 index 1d95d07..0000000 --- a/dietlibc-0.31.20080212-printffmt.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -up dietlibc-0.31.20080212/test/printf.c.~1~ dietlibc-0.31.20080212/test/printf.c -diff -up dietlibc-0.31.20080212/lib/__v_printf.c.~1~ dietlibc-0.31.20080212/lib/__v_printf.c ---- dietlibc-0.31.20080212/lib/__v_printf.c.~1~ 2008-02-13 15:42:52.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/__v_printf.c 2008-02-13 17:26:13.000000000 +0100 -@@ -222,7 +222,7 @@ print_out: - - if (flag_dot && width==0) width=preci; - if (!flag_dot) preci=sz; -- if (!flag_left) { /* do left-side padding */ -+ if (!flag_left && padwith==' ') { /* do left-side padding with spaces */ - if (write_pad(&len,fn,width-preci,padwith)) - return -1; - } -@@ -230,6 +230,10 @@ print_out: - B_WRITE(fn,sign,todo); - len+=todo; - } -+ if (!flag_left && padwith!=' ') { /* do left-side padding with '0' */ -+ if (write_pad(&len,fn,width-preci,padwith)) -+ return -1; -+ } - /* do preci padding */ - if (write_pad(&len,fn,preci-sz,precpadwith)) - return -1; -@@ -385,7 +389,7 @@ num_printf: - - sz=strlen(s); - if (width>=8; -+ while ((*s1++ = GFC(l))) INCSTR(l); - return (res); - } - *(unsigned long *) s1 = l; -diff -upN dietlibc-0.31.20080212/lib/strcmp.c.strend dietlibc-0.31.20080212/lib/strcmp.c ---- dietlibc-0.31.20080212/lib/strcmp.c.strend 2008-02-14 22:48:00.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 23:02:14.000000000 +0100 -@@ -35,12 +35,12 @@ strcmp (const char *s1, const char *s2) - ((((l2 - MKW(0x1ul)) & ~l2) & MKW(0x80ul))) || l1 != l2) { - unsigned char c1, c2; - while (1) { -- c1 = l1 & 0xff; -- c2 = l2 & 0xff; -+ c1 = GFC(l1); -+ c2 = GFC(l2); - if (!c1 || c1 != c2) - return (c1 - c2); -- l1 >>= 8; -- l2 >>= 8; -+ INCSTR(l1); -+ INCSTR(l2); - } - } - } -diff -upN dietlibc-0.31.20080212/dietstring.h.strend dietlibc-0.31.20080212/dietstring.h ---- dietlibc-0.31.20080212/dietstring.h.strend 2003-12-21 13:06:36.000000000 +0100 -+++ dietlibc-0.31.20080212/dietstring.h 2008-02-14 23:03:51.000000000 +0100 -@@ -11,6 +11,16 @@ - # define STRALIGN(x) (((unsigned long)x&3)?4-((unsigned long)x&3):0) - #endif - -+/* GFC(x) - returns first character */ -+/* INCSTR(x) - moves to next character */ -+#if __BYTE_ORDER == __LITTLE_ENDIAN -+# define GFC(x) ((x)&0xff) -+# define INCSTR(x) do { x >>= 8; } while (0) -+#else -+# define GFC(x) (((x)>>(sizeof(x)*8-8))&0xff) -+# define INCSTR(x) do { x <<= 8; } while (0) -+#endif -+ - #define UNALIGNED(x,y) (((unsigned long)x & (sizeof (unsigned long)-1)) ^ ((unsigned long)y & (sizeof (unsigned long)-1))) - - #endif /* _DIET_STRING_H_ */ diff --git a/dietlibc-0.31.20080212-strlen.patch b/dietlibc-0.31.20080212-strlen.patch deleted file mode 100644 index eca2a3e..0000000 --- a/dietlibc-0.31.20080212-strlen.patch +++ /dev/null @@ -1,263 +0,0 @@ -diff -upN dietlibc-0.31.20080212/x86_64/strlen.c.strlen dietlibc-0.31.20080212/x86_64/strlen.c ---- dietlibc-0.31.20080212/x86_64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 -+++ dietlibc-0.31.20080212/x86_64/strlen.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --#include "alpha/strlen.c" -diff -upN dietlibc-0.31.20080212/test/string/strlen.c.strlen dietlibc-0.31.20080212/test/string/strlen.c ---- dietlibc-0.31.20080212/test/string/strlen.c.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/string/strlen.c 2008-02-14 20:01:08.000000000 +0100 -@@ -1,10 +1,35 @@ - #include - #include -+#include -+ -+/* make it large enough to test all possible alignments, number of trailing -+ * bytes and word sizes */ -+#define BUFLEN (__WORDSIZE/8 * 4) - - int main() { -- const char* x="foo bar baz"; -+ /* will hold the string, the trailing zero and a test pattern */ -+ char buf[BUFLEN + 1 + __WORDSIZE/8]; -+ size_t len; -+ - assert(strlen("")==0); -- assert(strlen(x)==11); -- assert(strlen(x+5)==6); -+ -+ for (len=0; len --#include -- --int main() { -- const char* x="foo bar baz"; -- size_t i; -- assert(strlen("")==0); -- for (i=0; i<11; ++i) -- assert(strlen(x+i)==11-i); -- return 0; --} -diff -upN dietlibc-0.31.20080212/test/Makefile.strlen dietlibc-0.31.20080212/test/Makefile ---- dietlibc-0.31.20080212/test/Makefile.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/Makefile 2008-02-14 20:01:08.000000000 +0100 -@@ -13,7 +13,7 @@ gethostbyname_r getmntent getopt getpass - glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ - memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest \ - protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ --speed spent sprintf sscanf stdarg strcasecmp strcmp strlen strncat strncpy strptime strrchr \ -+speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ - strstr strtol sysenter ungetc waitpid - - test: $(TESTPROGRAMS) -diff -upN dietlibc-0.31.20080212/test/runtests.sh.strlen dietlibc-0.31.20080212/test/runtests.sh ---- dietlibc-0.31.20080212/test/runtests.sh.strlen 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/runtests.sh 2008-02-14 20:01:08.000000000 +0100 -@@ -1,6 +1,6 @@ - SUBDIRS="dirent inet stdio string stdlib time" - --TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strlen strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" -+TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memcpy memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" - - STDIN="read1" - PASS="getpass" -diff -upN dietlibc-0.31.20080212/sparc64/strlen.c.strlen dietlibc-0.31.20080212/sparc64/strlen.c ---- dietlibc-0.31.20080212/sparc64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 -+++ dietlibc-0.31.20080212/sparc64/strlen.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --#include "alpha/strlen.c" -diff -upN dietlibc-0.31.20080212/ppc64/strlen.c.strlen dietlibc-0.31.20080212/ppc64/strlen.c ---- dietlibc-0.31.20080212/ppc64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 -+++ dietlibc-0.31.20080212/ppc64/strlen.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --#include "alpha/strlen.c" -diff -upN dietlibc-0.31.20080212/lib/strstr.c.strlen dietlibc-0.31.20080212/lib/strstr.c ---- dietlibc-0.31.20080212/lib/strstr.c.strlen 2003-08-19 21:34:18.000000000 +0200 -+++ dietlibc-0.31.20080212/lib/strstr.c 2008-02-14 20:01:08.000000000 +0100 -@@ -4,7 +4,7 @@ - char *strstr(const char *haystack, const char *needle) { - size_t nl=strlen(needle); - size_t hl=strlen(haystack); -- int i; -+ size_t i; - if (!nl) goto found; - if (nl>hl) return 0; - for (i=hl-nl+1; __likely(i); --i) { -diff -upN dietlibc-0.31.20080212/lib/strlen.c.strlen dietlibc-0.31.20080212/lib/strlen.c ---- dietlibc-0.31.20080212/lib/strlen.c.strlen 2003-08-19 21:34:18.000000000 +0200 -+++ dietlibc-0.31.20080212/lib/strlen.c 2008-02-14 21:31:09.000000000 +0100 -@@ -1,6 +1,7 @@ - #include - #include "dietfeatures.h" - #include -+#include - - #ifdef WANT_SMALL_STRING_ROUTINES - size_t strlen(const char *s) { -@@ -10,38 +11,88 @@ size_t strlen(const char *s) { - return i; - } - #else --static const unsigned long magic = 0x01010101; -+ -+#if __WORDSIZE == 64 -+typedef uint64_t word_t; -+#elif __WORDSIZE == 32 -+typedef uint32_t word_t; -+#else -+#error unsupported __WORDSIZE -+#endif -+ -+static word_t const magic = (word_t)(0x0101010101010101ull); - - size_t strlen(const char *s) - { - const char *t = s; -- unsigned long word; -+ word_t word; -+ word_t mask; - -- if (!s) return 0; -+ if (__unlikely(!s)) return 0; - - /* Byte compare up until word boundary */ -- for (; ((unsigned long) t & 3); t++) -+ for (; ((unsigned long) t & (sizeof(magic)-1)); t++) - if (!*t) return t - s; - - /* Word compare */ - do { -- word = *((unsigned long *) t); t += 4; -+ word = *((word_t const *) t); t += sizeof word; - word = (word - magic) &~ word; - word &= (magic << 7); - } while (__likely(word == 0)); - --#if BYTE_ORDER == LITTLE_ENDIAN -- /* word & 0x80808080 == word */ -- word = (word - 1) & (magic << 10); -- word += (word << 8) + (word << 16); -- t += word >> 26; -+#if __BYTE_ORDER == __LITTLE_ENDIAN -+ (void)mask; -+ switch (sizeof(word)) { -+ case 8: -+ /* word & 0x8080808080808080 == word */ -+ word = (word - 1) & (magic << 8); -+ word += (word << 32); -+ word += (word << 16); -+ word += (word << 8); -+ t += word >> 56; -+ break; -+ -+ case 4: -+ /* word & 0x80808080 == word */ -+ word = (word - 1) & (magic << 10); -+ word += (word << 8) + (word << 16); -+ t += word >> 26; -+ break; -+ -+ default: { char exc[sizeof(word)==8]; (void)exc; } -+ } - #else -- if ((word & 0x80800000) == 0) { -- word <<= 16; -- t += 2; -+ mask = (magic << 7); -+ -+ switch (sizeof(word)) { -+ case 8: -+ mask <<= 4*8; -+ if ((word & mask) == 0) { -+ t += 4; -+ word <<= 4*8; -+ } -+ /* fallthrough */ -+ -+ case 4: -+ mask <<= 2*8; -+ if ((word & mask) == 0) { -+ t += 2; -+ word <<= 2*8; -+ } -+ /* fallthrough */ -+ -+ case 2: -+ mask <<= 1*8; -+ if ((word & mask) == 0) { -+ t += 1; -+ word <<= 1*8; -+ } -+ break; -+ -+ default: { char exc[sizeof(word)==8]; (void)exc; } - } -- if ((word & 0x80000000) == 0) t += 1; - #endif -- return ((const char *) t) - 4 - s; -+ return t - sizeof(word) - s; - } - #endif -diff -upN dietlibc-0.31.20080212/ia64/strlen.c.strlen dietlibc-0.31.20080212/ia64/strlen.c ---- dietlibc-0.31.20080212/ia64/strlen.c.strlen 2007-10-04 18:19:15.000000000 +0200 -+++ dietlibc-0.31.20080212/ia64/strlen.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1 +0,0 @@ --#include "alpha/strlen.c" -diff -upN dietlibc-0.31.20080212/alpha/strlen.c.strlen dietlibc-0.31.20080212/alpha/strlen.c ---- dietlibc-0.31.20080212/alpha/strlen.c.strlen 2001-01-09 18:57:38.000000000 +0100 -+++ dietlibc-0.31.20080212/alpha/strlen.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,32 +0,0 @@ --#include -- --static const unsigned long long magic = 0x0101010101010101LL; -- --size_t strlen(const char *s) --{ -- const char *t = s; -- unsigned long long word; -- -- if (!s) return 0; -- -- /* Byte compare up until 64 bit word boundary */ -- for (; ((unsigned long long) t & 7); t++) -- if (!*t) return t - s; -- -- /* Word compare */ -- do { -- word = *((unsigned long long *) t); t += 8; -- word = (word - magic) &~ word; -- word &= (magic << 7); -- } while (word == 0); -- -- /* word & 0x8080808080808080 == word */ -- word = (word - 1) & (magic << 8); -- word += (word << 32); -- word += (word << 16); -- word += (word << 8); -- t += word >> 56; -- return ((const char *) t) - 8 - s; --} -- -- diff --git a/dietlibc-0.31.20080212-ulong.patch b/dietlibc-0.31.20080212-ulong.patch deleted file mode 100644 index 89bf8f7..0000000 --- a/dietlibc-0.31.20080212-ulong.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff -upN dietlibc-0.31.20080212/lib/strcpy.c.~1~ dietlibc-0.31.20080212/lib/strcpy.c ---- dietlibc-0.31.20080212/lib/strcpy.c.~1~ 2003-12-21 13:06:36.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/strcpy.c 2008-02-14 21:36:45.000000000 +0100 -@@ -25,7 +25,7 @@ strcpy (char *s1, const char *s2) - - while (1) { - l = *(const unsigned long *) s2; -- if (((l - MKW(0x1)) & ~l) & MKW(0x80)) { -+ if (((l - MKW(0x1ul)) & ~l) & MKW(0x80ul)) { - unsigned char c; - while ((*s1++ = (l & 0xff))) l>>=8; - return (res); -diff -upN dietlibc-0.31.20080212/lib/strcmp.c.~1~ dietlibc-0.31.20080212/lib/strcmp.c ---- dietlibc-0.31.20080212/lib/strcmp.c.~1~ 2003-12-21 13:06:36.000000000 +0100 -+++ dietlibc-0.31.20080212/lib/strcmp.c 2008-02-14 21:37:38.000000000 +0100 -@@ -31,8 +31,8 @@ strcmp (const char *s1, const char *s2) - while (1) { - l1 = *lx1++; - l2 = *lx2++; -- if ((((l1 - MKW(0x1)) & ~l1) & MKW(0x80)) || -- ((((l2 - MKW(0x1)) & ~l2) & MKW(0x80))) || l1 != l2) { -+ if ((((l1 - MKW(0x1ul)) & ~l1) & MKW(0x80ul)) || -+ ((((l2 - MKW(0x1ul)) & ~l2) & MKW(0x80ul))) || l1 != l2) { - unsigned char c1, c2; - while (1) { - c1 = l1 & 0xff; diff --git a/sources b/sources index 91d1271..f816275 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -11c4b650b3644269a8d2a624fd9780ea dietlibc-0.31.20080212.tar.bz2 +4d42fda6c0f75195337e0753138e752c dietlibc-0.31.20080221.tar.bz2 From d5c0a2be8c0d9c9b2f39076875102367bab7b703 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:41:48 +0000 Subject: [PATCH 21/65] - updated to CVS snapshot 20080221; removed most of the last patches as they are now in upstream - moved files into platform neutral /usr/lib dir (not using %%_lib or %%_libdir macro) - added -devel subpackage due to multiarch issues; main package contains only the 'diet' binary plus some tools while -devel holds all the header and object files. --- dietlibc.spec | 58 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index ebe222b..6266aa2 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -6,7 +6,8 @@ ## --with dynamic ... enable dynamic lib support -%global snapshot 20080212 +%global snapshot 20080221 +%global pkglibdir %_prefix/lib/dietlibc %ifarch %ix86 x86_64 %bcond_without ssp @@ -48,18 +49,18 @@ Patch30: dietlibc-0.30-longdouble.patch Patch31: dietlibc-0.31-defpath.patch Patch32: dietlibc-0.31-stacksmash.patch Patch33: dietlibc-0.31-stacksmash-dyn.patch -Patch34: dietlibc-0.31.20080212-printffmt.patch -Patch40: dietlibc-0.31-printftest.patch Patch41: dietlibc-0.31.20080212-teststdout.patch -Patch42: dietlibc-0.31.20080212-strlen.patch -Patch43: dietlibc-0.31.20080212-ulong.patch -Patch44: dietlibc-0.31.20080212-strend.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} -#### HACK!! -BuildRequires: strace gdb +Requires: %name-devel = %version-%release + + +%package devel +Summary: dietlibc development files +Group: Development/Libraries +Requires: %name = %version-%release %package lib @@ -73,6 +74,12 @@ The diet libc is a libc that is optimized for small size. It can be used to create small statically linked binaries for Linux on alpha, arm, hppa, ia64, i386, mips, s390, sparc, sparc64, ppc and x86_64. +%description devel +The diet libc is a libc that is optimized for small size. It can be +used to create small statically linked binaries for Linux on alpha, +arm, hppa, ia64, i386, mips, s390, sparc, sparc64, ppc and x86_64. + +This package contains the header and object files for dietlibc. %description lib The diet libc is a libc that is optimized for small size. It can be @@ -90,13 +97,8 @@ This package contains the dynamic libraries for dietlibc. %patch31 -p1 -b .defpath %patch32 -p1 -b .stacksmash %patch33 -p1 -b .stacksmash-dyn -%patch34 -p1 -b .printffmt -%patch40 -p1 -b .printftest %patch41 -p1 -b .teststdout -%patch42 -p1 -b .strlen -%patch43 -p1 -b .ulong -%patch44 -p1 -b .strend %if %{without ssp} @@ -111,7 +113,7 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; sed -i -e 's!strip !: !g' Makefile %global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 -%global basemakeflags prefix=%_libdir/dietlibc BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags $XTRA_CFLAGS" PDIET=%_libdir/dietlibc +%global basemakeflags prefix=%pkglibdir BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags $XTRA_CFLAGS" PDIET=%pkglibdir %global makeflags %basemakeflags for i in `find test -name 'runtests.sh'`; do @@ -132,9 +134,9 @@ rm -rf $RPM_BUILD_ROOT install -d -m755 $RPM_BUILD_ROOT/etc make %makeflags DESTDIR=$RPM_BUILD_ROOT install -ln -s lib-%_arch ${RPM_BUILD_ROOT}%_libdir/dietlibc/lib-%_arch-%_vendor +ln -s lib-%_arch ${RPM_BUILD_ROOT}%pkglibdir/lib-%_arch-%_vendor -chmod a-x $RPM_BUILD_ROOT%_libdir/dietlibc/lib-*/*.o +chmod a-x $RPM_BUILD_ROOT%pkglibdir/lib-*/*.o rm -f $RPM_BUILD_ROOT%_bindir/dnsd @@ -153,24 +155,38 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) -%{?with_dynamic:%exclude %_libdir/dietlibc/*/*.so} %doc AUTHOR BUGS CAVEAT CHANGES COPYING FAQ PORTING README* %doc SECURITY THANKS TODO %doc %_mandir/*/* %_bindir/* -%_libdir/dietlibc + + +%files devel +%defattr(-,root,root,-) +%pkglibdir +%{?with_dynamic:%exclude %pkglibdir/*/*.so} + %if %{with dynamic} %files lib %defattr(-,root,root,-) %config(noreplace) %_sysconfdir/* -%dir %_libdir/dietlibc -%dir %_libdir/dietlibc/lib-* -%_libdir/dietlibc/lib-%target_cpu/*.so +%dir %pkglibdir +%dir %pkglibdir/lib-* +%pkglibdir/lib-%target_cpu/*.so %endif %changelog +* Fri Feb 22 2008 Enrico Scholz - 0.31-1.20080221 +- updated to CVS snapshot 20080221; removed most of the last patches + as they are now in upstream +- moved files into platform neutral /usr/lib dir (not using %%_lib or + %%_libdir macro) +- added -devel subpackage due to multiarch issues; main package contains + only the 'diet' binary plus some tools while -devel holds all the + header and object files. + * Wed Feb 13 2008 Enrico Scholz - 0.31-1.20080212 - updated to CVS snapshot 20080212 - fixed printf regression for '%+04i' style formats From 754e437ece85586b658b7fd576322f6b119f3cf6 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:43:05 +0000 Subject: [PATCH 22/65] fixed optimized memcpy(3) --- dietlibc-0.31.20080221-memcpy.patch | 79 +++++++++++++++++++++++++++++ dietlibc.spec | 5 +- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 dietlibc-0.31.20080221-memcpy.patch diff --git a/dietlibc-0.31.20080221-memcpy.patch b/dietlibc-0.31.20080221-memcpy.patch new file mode 100644 index 0000000..4167233 --- /dev/null +++ b/dietlibc-0.31.20080221-memcpy.patch @@ -0,0 +1,79 @@ +2008-02-22 Enrico Scholz + + - fixed memcpy(3) for unaligned buffers; previously, code like + + | test[15] = 'a'; + | test[31] = 'b'; + | memcpy(test+7, test+23, 9); + | assert(test[15]==test[31]); + + failed + + - added memcmpy(3) testcase for all (?) possible alignments + +--- dietlibc-0.31.20080221/lib/memcpy.c.memcpy 2003-12-21 13:06:36.000000000 +0100 ++++ dietlibc-0.31.20080221/lib/memcpy.c 2008-02-22 18:51:52.000000000 +0100 +@@ -28,6 +28,8 @@ memcpy (void *dst, const void *src, size + *c1++ = *c2++; + if (n == (size_t) - 1) + return (res); ++ dst = c1; ++ src = c2; + } + + lx1 = (unsigned long *) dst; +--- dietlibc-0.31.20080221/test/string/memcpy.c.memcpy 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080221/test/string/memcpy.c 2008-02-22 18:53:58.000000000 +0100 +@@ -1,11 +1,52 @@ + #include + #include ++#include ++ ++#define WO (__WORDSIZE/8) + + int main() { ++ size_t const LENS[] = { ++ 1, 2, 3, 4, 5, 6, 7, 8, ++ WO -3, WO -2, WO -1, WO, WO +1, WO +2, WO +3, WO +4, ++ WO*2-3, WO*2-2, WO*2-1, WO*2, WO*2+1, WO*2+2, WO*2+3, WO*2+4, ++ WO*3-3, WO*3-2, WO*3-1, WO*3, WO*3+1, WO*3+2, WO*3+3, WO*3+4, ++ (size_t)(-1) }; ++ ++ size_t i,j; ++ size_t const *len; + char test[100]="blubber"; ++ + assert(memcpy(test,"blubber",8)==test); + assert(!memcmp(test,"blubber",8)); + assert(memcpy(0,0,0)==0); + assert(memcpy(test,"foobar",3) && test[2]=='o'); ++ ++ /* test all possible alignments of src and destination in combination with ++ * some interesting lengths */ ++ for (len=LENS+0; *len!=(size_t)(-1); ++len) { ++ unsigned char src[WO * 5]; ++ ++ for (i=0; i<*len + WO; ++i) ++ src[i] = i; ++ ++ for (i=MIN(WO,*len); i>0;) { ++ --i; ++ ++ for (j=MIN(WO,*len); j>0;) { ++ unsigned char dst[WO * 5]; ++ size_t k; ++ --j; ++ ++ for (k=0; k<*len; ++k) ++ dst[j+k]=src[i+k]+1; ++ ++ assert(memcpy(dst+j, src+i, *len)==dst+j); ++ ++ for (k=0; k<*len; ++k) ++ assert(dst[j+k]==src[i+k]); ++ } ++ } ++ } ++ + return 0; + } diff --git a/dietlibc.spec b/dietlibc.spec index 6266aa2..d845ff2 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -50,6 +50,7 @@ Patch31: dietlibc-0.31-defpath.patch Patch32: dietlibc-0.31-stacksmash.patch Patch33: dietlibc-0.31-stacksmash-dyn.patch Patch41: dietlibc-0.31.20080212-teststdout.patch +Patch42: dietlibc-0.31.20080221-memcpy.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -99,6 +100,7 @@ This package contains the dynamic libraries for dietlibc. %patch33 -p1 -b .stacksmash-dyn %patch41 -p1 -b .teststdout +%patch42 -p1 -b .memcpy %if %{without ssp} @@ -141,7 +143,7 @@ rm -f $RPM_BUILD_ROOT%_bindir/dnsd %check -XTRA_CFLAGS='-fno-builtin' +XTRA_CFLAGS='-fno-builtin -g3 -O0' make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) -k || : make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) || : @@ -186,6 +188,7 @@ rm -rf $RPM_BUILD_ROOT - added -devel subpackage due to multiarch issues; main package contains only the 'diet' binary plus some tools while -devel holds all the header and object files. +- fixed optimized memcpy(3) * Wed Feb 13 2008 Enrico Scholz - 0.31-1.20080212 - updated to CVS snapshot 20080212 From ae725ff328d89363fa567b2b6adfee5b8786d00e Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:44:09 +0000 Subject: [PATCH 23/65] fixed CFLAGS for check --- dietlibc.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index d845ff2..d450414 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -143,7 +143,7 @@ rm -f $RPM_BUILD_ROOT%_bindir/dnsd %check -XTRA_CFLAGS='-fno-builtin -g3 -O0' +XTRA_CFLAGS='-fno-builtin' make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) -k || : make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) || : From bc725908834cb31bbc084f64b9d042d534165082 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:45:23 +0000 Subject: [PATCH 24/65] updated to CVS snapshot 20080409 --- .cvsignore | 5 +---- dietlibc.spec | 9 +++++---- sources | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/.cvsignore b/.cvsignore index 87e051f..842a349 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,4 +1 @@ -dietlibc-[0-9].[0-9][0-9] -dietlibc*.tar.bz2* -dietlibc*.rpm -i386 +dietlibc-0.31.20080409.tar.bz2 diff --git a/dietlibc.spec b/dietlibc.spec index d450414..ec324c1 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -6,7 +6,7 @@ ## --with dynamic ... enable dynamic lib support -%global snapshot 20080221 +%global snapshot 20080409 %global pkglibdir %_prefix/lib/dietlibc %ifarch %ix86 x86_64 @@ -16,7 +16,7 @@ %endif %ifarch %ix86 x86_64 arm -%bcond_with dynamic +%bcond_with dynamic\ %endif %ifarch %ix86 @@ -50,7 +50,6 @@ Patch31: dietlibc-0.31-defpath.patch Patch32: dietlibc-0.31-stacksmash.patch Patch33: dietlibc-0.31-stacksmash-dyn.patch Patch41: dietlibc-0.31.20080212-teststdout.patch -Patch42: dietlibc-0.31.20080221-memcpy.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -100,7 +99,6 @@ This package contains the dynamic libraries for dietlibc. %patch33 -p1 -b .stacksmash-dyn %patch41 -p1 -b .teststdout -%patch42 -p1 -b .memcpy %if %{without ssp} @@ -180,6 +178,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Apr 10 2008 Enrico Scholz - 0.31-1.20080409 +- updated to CVS snapshot 20080409 + * Fri Feb 22 2008 Enrico Scholz - 0.31-1.20080221 - updated to CVS snapshot 20080221; removed most of the last patches as they are now in upstream diff --git a/sources b/sources index f816275..b84c684 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4d42fda6c0f75195337e0753138e752c dietlibc-0.31.20080221.tar.bz2 +8ab045af7ad246c930c4e1b0fca1063c dietlibc-0.31.20080409.tar.bz2 From 6cd264d6138120c8807bee9954257b67038ceb4f Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:46:39 +0000 Subject: [PATCH 25/65] removed as now in upstream --- dietlibc-0.31.20080221-memcpy.patch | 79 ----------------------------- 1 file changed, 79 deletions(-) delete mode 100644 dietlibc-0.31.20080221-memcpy.patch diff --git a/dietlibc-0.31.20080221-memcpy.patch b/dietlibc-0.31.20080221-memcpy.patch deleted file mode 100644 index 4167233..0000000 --- a/dietlibc-0.31.20080221-memcpy.patch +++ /dev/null @@ -1,79 +0,0 @@ -2008-02-22 Enrico Scholz - - - fixed memcpy(3) for unaligned buffers; previously, code like - - | test[15] = 'a'; - | test[31] = 'b'; - | memcpy(test+7, test+23, 9); - | assert(test[15]==test[31]); - - failed - - - added memcmpy(3) testcase for all (?) possible alignments - ---- dietlibc-0.31.20080221/lib/memcpy.c.memcpy 2003-12-21 13:06:36.000000000 +0100 -+++ dietlibc-0.31.20080221/lib/memcpy.c 2008-02-22 18:51:52.000000000 +0100 -@@ -28,6 +28,8 @@ memcpy (void *dst, const void *src, size - *c1++ = *c2++; - if (n == (size_t) - 1) - return (res); -+ dst = c1; -+ src = c2; - } - - lx1 = (unsigned long *) dst; ---- dietlibc-0.31.20080221/test/string/memcpy.c.memcpy 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080221/test/string/memcpy.c 2008-02-22 18:53:58.000000000 +0100 -@@ -1,11 +1,52 @@ - #include - #include -+#include -+ -+#define WO (__WORDSIZE/8) - - int main() { -+ size_t const LENS[] = { -+ 1, 2, 3, 4, 5, 6, 7, 8, -+ WO -3, WO -2, WO -1, WO, WO +1, WO +2, WO +3, WO +4, -+ WO*2-3, WO*2-2, WO*2-1, WO*2, WO*2+1, WO*2+2, WO*2+3, WO*2+4, -+ WO*3-3, WO*3-2, WO*3-1, WO*3, WO*3+1, WO*3+2, WO*3+3, WO*3+4, -+ (size_t)(-1) }; -+ -+ size_t i,j; -+ size_t const *len; - char test[100]="blubber"; -+ - assert(memcpy(test,"blubber",8)==test); - assert(!memcmp(test,"blubber",8)); - assert(memcpy(0,0,0)==0); - assert(memcpy(test,"foobar",3) && test[2]=='o'); -+ -+ /* test all possible alignments of src and destination in combination with -+ * some interesting lengths */ -+ for (len=LENS+0; *len!=(size_t)(-1); ++len) { -+ unsigned char src[WO * 5]; -+ -+ for (i=0; i<*len + WO; ++i) -+ src[i] = i; -+ -+ for (i=MIN(WO,*len); i>0;) { -+ --i; -+ -+ for (j=MIN(WO,*len); j>0;) { -+ unsigned char dst[WO * 5]; -+ size_t k; -+ --j; -+ -+ for (k=0; k<*len; ++k) -+ dst[j+k]=src[i+k]+1; -+ -+ assert(memcpy(dst+j, src+i, *len)==dst+j); -+ -+ for (k=0; k<*len; ++k) -+ assert(dst[j+k]==src[i+k]); -+ } -+ } -+ } -+ - return 0; - } From 5ce1baa9fa893c727b794def26ef1ac43fd7845a Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:47:27 +0000 Subject: [PATCH 26/65] This patch adds support for dynamic PAGE_SIZE values to 'dietlibc'. It is a little bit invasive in several aspects: it modifies the startup code. We need to know the position of the elf-info auxilary table which is located after 'environ'. We can not use 'environ' directly because it might be modified by the application. Hence, an additional __elfinfo variable is placed into .bss and filled in the startup code. Depending on platform, this adds 1-3 instructions and an additional pointer to .bss. I tested only the i386 and x86_64 modifications; it would be nice when people with corresponding hardware would test the other ones. I am especially uncertain regarding the parisc changes. The elf-info stuff (which might be interesting e.g. for dynamic linking or sysconf(_SC_CLK_TCK)) can be enabled without the dynamic pagesize too. it removes the 'PAGE_SIZE' macro from ; this will break compilation of existing userspace application which are using this deprecated macro I added a new internal 'dietpagesize.h' header which defines | __DIET_PAGE_SIZE | __DIET_PAGE_SHIFT macros. These return either builtin constants (when WANT_DYN_PAGESIZE is not selected), or values derived from __libc_getpagesize(). Every usage of PAGE_SIZE in dietlibc code was replaced by these macros. due to the previous point, the internal 'struct __dirstream' was modified. I replaced | getdents64(d->fd,(struct dirent64*)d->buf, sizeof (d->buf)-1); with | getdents64(d->fd,(struct dirent64*)d->buf, __DIRSTREAM_BUF_SIZE-1); literally but I am not sure where the '-1' is coming from. There is one hunk, where this '-1' is missing so I think the '-1' should be removed from all calls to getdents64(). changes affect the *alloc() functions too; on x86_64 around 64 bytes where added to .text of alloc.o the new testprogramm requires a 'getconf' binary which returns the correct values for PAGE_SIZE and CLK_TCK --- dietlibc-0.31-pagesize.patch | 742 +++++++++++++++++++++++++++++++++++ 1 file changed, 742 insertions(+) create mode 100644 dietlibc-0.31-pagesize.patch diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch new file mode 100644 index 0000000..b29fbff --- /dev/null +++ b/dietlibc-0.31-pagesize.patch @@ -0,0 +1,742 @@ +diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c +--- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 ++++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-12 20:13:10.000000000 +0200 +@@ -4,16 +4,18 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + #ifdef __NR_mmap2 + void*__mmap2(void*start,size_t length,int prot,int flags,int fd,off_t pgoffset); + + void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset); + void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) { +- if (offset&(PAGE_SIZE-1)) { ++ if (offset&(__DIET_PAGE_SIZE)) { + errno=-EINVAL; + return MAP_FAILED; + } +- return __mmap2(addr,len,prot,flags,fd,offset>>PAGE_SHIFT); ++ return __mmap2(addr,len,prot,flags,fd,offset>>__DIET_PAGE_SHIFT); + } + + void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) +diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c +--- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 ++++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-12 20:13:10.000000000 +0200 +@@ -14,7 +14,7 @@ + #ifndef WANT_LARGEFILE_BACKCOMPAT + struct dirent64* readdir64(DIR *d) { + if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents64(d->fd,(struct dirent64*)d->buf, sizeof (d->buf)-1); ++ int res=getdents64(d->fd,(struct dirent64*)d->buf, __DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +@@ -32,7 +32,7 @@ again: + if (!trygetdents64) { + #endif + if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents(d->fd,(struct dirent*)d->buf, sizeof (d->buf)-1); ++ int res=getdents(d->fd,(struct dirent*)d->buf, __DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +@@ -46,7 +46,7 @@ again: + #ifdef __NR_getdents64 + } + if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents64(d->fd,(struct dirent64*)d->buf,sizeof (d->buf)); ++ int res=getdents64(d->fd,(struct dirent64*)d->buf,__DIRSTREAM_BUF_SIZE); + if (res<=0) { + if (errno==ENOSYS) { + trygetdents64=0; +diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c +--- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-12 20:13:10.000000000 +0200 +@@ -5,6 +5,8 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + DIR* opendir ( const char* name ) { + int fd = open (name, O_RDONLY | O_DIRECTORY); + DIR* t = NULL; +@@ -12,7 +14,7 @@ DIR* opendir ( const char* name ) { + if ( fd >= 0 ) { + if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) + goto lose; +- t = (DIR *) mmap (NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, ++ t = (DIR *) mmap (NULL, __DIET_PAGE_SIZE, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (t == MAP_FAILED) + lose: +diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c +--- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-12 20:13:10.000000000 +0200 +@@ -5,7 +5,7 @@ + + struct dirent* readdir(DIR *d) { + if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents(d->fd,(struct dirent*)d->buf,sizeof (d->buf)-1); ++ int res=getdents(d->fd,(struct dirent*)d->buf,__DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c +--- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-12 20:13:10.000000000 +0200 +@@ -4,8 +4,10 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + int closedir (DIR* d) { + int res=close(d->fd); +- munmap (d, PAGE_SIZE); ++ munmap (d, __DIET_PAGE_SIZE); + return res; + } +diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c +--- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-12 20:13:10.000000000 +0200 +@@ -18,8 +18,7 @@ + #include + #include + +-#include /* for PAGE_SIZE */ +- ++#include "../dietpagesize.h" + + /* -- HELPER CODE --------------------------------------------------------- */ + +@@ -39,7 +38,7 @@ typedef struct { + #define BLOCK_START(b) (((void*)(b))-sizeof(__alloc_t)) + #define BLOCK_RET(b) (((void*)(b))+sizeof(__alloc_t)) + +-#define MEM_BLOCK_SIZE PAGE_SIZE ++#define MEM_BLOCK_SIZE __DIET_PAGE_SIZE + #define PAGE_ALIGN(s) (((s)+MEM_BLOCK_SIZE-1)&(unsigned long)(~(MEM_BLOCK_SIZE-1))) + + /* a simple mmap :) */ +diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S +--- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -31,6 +31,12 @@ _start: + lis 14,environ@ha + stw 5,environ@l(14) + ++#ifdef WANT_ELFINFO ++ /* TODO: can we really assume that environ and __elfinfo are on the ++ same 16 bit page? */ ++ stw 5,__elfinfo@l(14) ++#endif ++ + #ifdef WANT_DYNAMIC + mr 6,7 + bl _dyn_start +diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h +--- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 ++++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-12 20:13:10.000000000 +0200 +@@ -126,6 +126,16 @@ + /* #define WANT_SSP_XOR */ + + ++/* Some platforms like x86_64, ppc* or mips do not have a fixed PAGE_SIZE. ++ * Select WANT_DYN_PAGESIZE to detect the current PAGE_SIZE at runtime. Else, ++ * define WANT_STATIC_PAGESIZE to a proper value (must be a power of 2) ++ * matching the configured pagesize of the kernel where your binaries are ++ * running on. ++ * ++ * Selecting WANT_DYN_PAGESIZE enlarges the startup code by around 1-3 ++ * instructions and might add an additional __elfinfo symbol */ ++#define WANT_DYN_PAGESIZE ++/* #define WANT_STATIC_PAGESIZE 0x10000UL */ + + + /* stop uncommenting here ;-) */ +@@ -157,4 +167,8 @@ + #endif + #endif + ++#ifdef WANT_DYN_PAGESIZE ++#define WANT_ELFINFO ++#endif ++ + #endif +diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile +--- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-12 20:13:10.000000000 +0200 +@@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name + memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ + protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ + speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ +-strstr strtol sysenter ungetc waitpid ++strstr strtol sysconf sysenter ungetc waitpid + + test: $(TESTPROGRAMS) + +diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c +--- /dev/null 2008-03-18 07:40:22.289057188 +0100 ++++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-12 20:19:28.000000000 +0200 +@@ -0,0 +1,80 @@ ++#include ++#include ++#include ++#include ++#include ++ ++#include "../dietpagesize.h" ++ ++static long exec_getconf(char const *var) ++{ ++ char buf[128]; ++ pid_t pid; ++ int fd[2]; ++ int status; ++ ssize_t l; ++ ++ if (pipe(fd)<0 || (pid = fork())<0) ++ abort(); ++ ++ if (pid==0) { ++ close(fd[0]); ++ ++ if (fd[1]!=1) { ++ dup2(fd[1], 1); ++ close(fd[1]); ++ } ++ ++ execlp("getconf", "getconf", var, NULL); ++ _exit(1); ++ } ++ ++ close(fd[1]); ++ l = read(fd[0], buf, sizeof(buf)-1); ++ if (l<0) { ++ perror("read()"); ++ goto err; ++ } else if (l==sizeof(buf)-1) ++ goto err; ++ close(fd[0]); ++ ++ buf[l] = '\0'; ++ ++ if (waitpid(pid, &status, 0)<0) ++ goto err; ++ ++ if (!WIFEXITED(status) || WEXITSTATUS(status)!=0) ++ goto err; ++ ++ return strtol(buf, NULL, 10); ++ ++err: ++ kill(pid, SIGKILL); ++ abort(); ++} ++ ++static unsigned int do_check(char const *var, long exp) ++{ ++ long cur = exec_getconf(var); ++ ++ if (cur!=exp) { ++ fprintf(stderr, "%s mismatch: got %ld, expected %ld\n", ++ cur, exp); ++ return 1; ++ } ++ ++ return 0; ++} ++ ++int main(int argc, char *argv[]) ++{ ++ unsigned int err = 0; ++ ++ assert(sysconf(_SC_PAGESIZE) == __DIET_PAGE_SIZE); ++ assert(__DIET_PAGE_SIZE == (1<<__DIET_PAGE_SHIFT)); ++ ++ err += do_check("PAGE_SIZE", sysconf(_SC_PAGESIZE)); ++ err += do_check("CLK_TCK", sysconf(_SC_CLK_TCK)); ++ ++ return err; ++} +diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh +--- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-12 20:13:10.000000000 +0200 +@@ -1,6 +1,6 @@ + SUBDIRS="dirent inet stdio string stdlib time" + +-TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" ++TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" + + STDIN="read1" + PASS="getpass" +diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S +--- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -25,6 +25,11 @@ _start: + or %o3, %lo(environ), %o3 + stx %o2, [%o3] + ++#ifdef WANT_ELFINFO ++ add %o3, %o3, 8 ++ stx %o2, [%o3] ++#endif ++ + /* When starting a binary via the dynamic linker, %g1 contains the + address of the shared library termination function, which will be + registered with atexit(). If we are statically linked, this will +diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c +--- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 ++++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-12 20:13:10.000000000 +0200 +@@ -3,6 +3,8 @@ + #include + #include + ++#include "dietelfinfo.h" ++ + extern int __sc_nr_cpus(); + + long sysconf(int name) +@@ -16,6 +18,14 @@ long sysconf(int name) + return limit.rlim_cur; + } + case _SC_CLK_TCK: ++#ifdef WANT_ELFINFO ++ { ++ elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); ++ if (v) ++ return *v; ++ } ++#endif ++ + #ifdef __alpha__ + return 1024; + #else +@@ -23,11 +33,7 @@ long sysconf(int name) + #endif + + case _SC_PAGESIZE: +-#if ( defined(__alpha__) || defined(__sparc__) ) +- return 8192; +-#else +- return 4096; +-#endif ++ return __libc_getpagesize(); + + case _SC_ARG_MAX: + return ARG_MAX; +diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c +--- /dev/null 2008-03-18 07:40:22.289057188 +0100 ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-12 20:13:10.000000000 +0200 +@@ -0,0 +1,25 @@ ++#include ++#include "../dietelfinfo.h" ++ ++elf_addr_t *__get_elf_aux_value(unsigned int tag) ++{ ++ extern char ** __elfinfo; ++ elf_addr_t *aux_ptr; ++ char ** tmp; ++ ++ /* External symbol points to 'environ' after startup. Now, go the end ++ * of 'environ'; the auxiliary ELF table is located immediately after ++ * this position */ ++ ++ /* operate on tmp instead of __elfinfo to be thread safe */ ++ tmp = __elfinfo; ++ while (*tmp) ++ ++tmp; ++ __elfinfo = tmp; ++ ++ for (aux_ptr = (elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) ++ if (aux_ptr[0]==tag) ++ return aux_ptr+1; ++ ++ return NULL; ++} +diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c +--- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-12 20:15:33.000000000 +0200 +@@ -2,14 +2,25 @@ + #include + #include + +-#ifndef PAGE_SIZE +-#define PAGE_SIZE 4096 +-#endif ++#include "../dietelfinfo.h" ++#include "../dietpagesize.h" + +-size_t __libc_getpagesize(void); + size_t __libc_getpagesize(void) { +- return PAGE_SIZE; ++#ifdef WANT_DYN_PAGESIZE ++ static size_t pgsz; ++ ++ if (__unlikely(pgsz==0)) { ++ elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); ++ if (__likely(v)) ++ pgsz = *v; ++ else ++ pgsz = __DIET_PAGE_SIZE_PREDEF; ++ } ++ ++ return pgsz; ++#else ++ return __DIET_PAGE_SIZE_PREDEF; ++#endif + } + + size_t getpagesize(void) __attribute__((weak,alias("__libc_getpagesize"))); +- +diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +--- /dev/null 2008-03-18 07:40:22.289057188 +0100 ++++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-12 20:22:45.000000000 +0200 +@@ -0,0 +1,31 @@ ++#ifndef H_DIETLIBC_DIETPAGESIZE_H ++#define H_DIETLIBC_DIETPAGESIZE_H ++ ++#include ++#include "dietfeatures.h" ++ ++extern size_t __libc_getpagesize(void) __attribute__((__const__)) __pure; ++ ++#if defined(WANT_STATIC_PAGESIZE) ++# define __DIET_PAGE_SIZE_PREDEF (WANT_STATIC_PAGESIZE) ++# define __DIET_PAGE_SHIFT_PREDEF (ffs(__DIET_PAGE_SIZE_PREDEF)-1) ++#elif defined(__alpha__) || defined(__sparc__) ++# define __DIET_PAGE_SIZE_PREDEF (8192UL) ++# define __DIET_PAGE_SHIFT_PREDEF (13) ++#elif defined(__powerpc64__) ++# define __DIET_PAGE_SIZE_PREDEF (65536UL) ++# define __DIET_PAGE_SHIFT_PREDEF (16) ++#else ++# define __DIET_PAGE_SIZE_PREDEF (4096UL) ++# define __DIET_PAGE_SHIFT_PREDEF (12) ++#endif ++ ++#ifdef WANT_DYN_PAGESIZE ++# define __DIET_PAGE_SIZE (__libc_getpagesize()) ++# define __DIET_PAGE_SHIFT (ffs(__DIET_PAGE_SIZE)-1) ++#else ++# define __DIET_PAGE_SIZE __DIET_PAGE_SIZE_PREDEF ++# define __DIET_PAGE_SHIFT __DIET_PAGE_SHIFT_PREDEF ++#endif ++ ++#endif /* H_DIETLIBC_DIETPAGESIZE_H */ +diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S +--- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/s390x/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -26,6 +26,11 @@ _start: + larl %r13,environ + stg %r4,0(%r13) + ++#ifdef WANT_ELFINFO ++ ahi %r13, 8 /* TODO: does it really point to __elfinfo? */ ++ stg %r4,0(%r13) ++#endif ++ + /* call main or _dyn_start */ + #ifdef WANT_DYNAMIC + brasl %r14,_dyn_start +diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h +--- /dev/null 2008-03-18 07:40:22.289057188 +0100 ++++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-12 20:13:10.000000000 +0200 +@@ -0,0 +1,9 @@ ++#include "dietfeatures.h" ++ ++#ifdef WANT_ELFINFO ++#include ++#include ++ ++elf_addr_t * __get_elf_aux_value(unsigned int tag) ++ __attribute__((__visibility__("hidden"),__const__)); ++#endif +diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S +--- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/ia64/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -40,6 +40,11 @@ _start: + ;; + st8 [r14] = out2 /* store envp in environ */ + ++#ifdef WANT_ELFINFO ++ adds r14 = 8, r14 /* __elfinfo = environ + 8 */ ++ st8 [r14] = out2 /* store envp in __elfinfo */ ++#endif ++ + #ifdef WANT_DYNAMIC + /* FIXME: dl_init parameter ??? */ + br.call.sptk.few rp = _dyn_start +diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S +--- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/i386/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -25,6 +25,10 @@ _start: + PIC_INIT /* non-PIC: this is an empty line */ + PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ + ++#ifdef WANT_ELFINFO ++ PUT_VAR %eax, __elfinfo, %ecx ++#endif ++ + #ifdef PROFILING + pushl $_etext + pushl $.text +diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h +--- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 ++++ dietlibc-0.31.20080409/dietdirent.h 2008-04-12 20:13:10.000000000 +0200 +@@ -1,8 +1,12 @@ + #include + ++#include "dietpagesize.h" ++ + struct __dirstream { + int fd; +- char buf[PAGE_SIZE-(sizeof (int)*3)]; + unsigned int num; + unsigned int cur; ++ char buf[]; + }; /* stream data from opendir() */ ++ ++#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) +diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S +--- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/alpha/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -24,6 +24,10 @@ _start: + + stq $18, environ + ++#ifdef WANT_ELFINFO ++ stq $18, __elfinfo ++#endif ++ + #ifdef WANT_DYNAMIC + /* in v0 ($0) is the ld.so _fini pointer */ + mov $0, $19 /* mov v0(dynload) to a3 */ +diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S +--- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 ++++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-12 20:13:10.000000000 +0200 +@@ -1,6 +1,7 @@ + .section ".bss" + .align 8 + #include ++#include + + .type environ,object + .weak environ +@@ -15,3 +16,22 @@ environ: + #endif + .size environ,.-environ + .size __environ,.-__environ ++ ++/* __elfinfo will be a copy of __environ after startup. Later, it will be ++ updated by __get_elf_aux_value() to point to the terminating NULL of the ++ environment. ++ ++ Startup code assumes that __elfinfo is located immediately after ++ __environ. */ ++ ++#ifdef WANT_ELFINFO ++.type __elfinfo,object ++.weak __elfinfo ++__elfinfo: ++#if __WORDSIZE == 64 ++ .quad 0 ++#else ++ .long 0 ++#endif ++.size __elfinfo,.-__elfinfo ++#endif +diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S +--- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/arm/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -23,11 +23,15 @@ _start: + #ifdef __DYN_LIB + ldr sl, .L4 + 1: add sl, pc, sl +- str a3, [sl, ip] @ environ = envp ++ str a3, [ip, sl]! @ environ = envp; ip = GOT(environ) + #else + str a3, [ip, #0] @ environ = envp + #endif + ++#ifdef WANT_ELFINFO ++ str a3, [ip, #4] @ __elfinfo = envp ++#endif ++ + #ifdef PROFILING + stmdb sp!, { r0 - r3 } + ldr r0, .L5 +@@ -70,6 +74,3 @@ _exit: + .L5: .word .text + .L6: .word _etext + #endif +- +- +- +diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S +--- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/parisc/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -34,6 +34,11 @@ _start: + ldil LP%environ, %r19 + ldo RP%environ(%r19), %r19 + ++#ifdef WANT_ELFINFO ++ ldil LP%__elfinfo, %r19 ++ ldo RP%__elfinfo(%r19), %r19 ++#endif ++ + /* Expand the stack to store the 5th through 7th args */ + ldo 64(%sp), %sp + +diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h +--- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 ++++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-12 20:13:10.000000000 +0200 +@@ -60,15 +60,6 @@ struct shm_info { + unsigned long swap_successes; + }; + +-#if defined(__i386__) || defined(__mips__) || defined(__arm__) || defined(__powerpc__) || defined (__powerpc64__) || defined(__s390__) || defined(__hppa__) || defined(__x86_64__) || defined(__ia64__) +-#define PAGE_SIZE 4096UL +-#define PAGE_SHIFT 12 +-#elif defined(__alpha__) || defined(__sparc__) +-/* sun4* has 4k except sun4 architecture, sparc64 has 8k */ +-#define PAGE_SIZE 8192UL +-#define PAGE_SHIFT 13 +-#endif +- + extern int shmget(key_t key, int size, int shmflg) __THROW; + extern void *shmat(int shmid, const void *shmaddr, int shmflg) __THROW; + extern int shmdt (const void *shmaddr) __THROW; +diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S +--- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -25,6 +25,11 @@ _start: + or %o3, %lo(environ), %o3 + st %o2, [%o3] + ++#ifdef WANT_ELFINFO ++ add %o3, %o3, 4 ++ st %o2, [%o3] ++#endif ++ + /* When starting a binary via the dynamic linker, %g1 contains the + address of the shared library termination function, which will be + registered with atexit(). If we are statically linked, this will +diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c +--- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-12 20:13:10.000000000 +0200 +@@ -3,17 +3,15 @@ + #include + #include + +-extern void* __ipc(); ++#include "../dietpagesize.h" + +-#ifndef PAGE_SIZE +-#define PAGE_SIZE 4096 +-#endif ++extern void* __ipc(); + + void* shmat(int shmid,const void* shmaddr,int shmflg) { + void* raddr; + register void* result; + result=__ipc(SHMAT,shmid,shmflg,&raddr,shmaddr); +- if ((unsigned long)result <= -(unsigned long)PAGE_SIZE) ++ if ((unsigned long)result <= -(unsigned long)__DIET_PAGE_SIZE) + result=raddr; + return result; + } +diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S +--- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -58,6 +58,12 @@ _start: + oris 14,14,environ@ha + std 5,environ@l(14) + ++#ifdef WANT_ELFINFO ++ /* TODO: can we really assume that environ and __elfinfo are on the ++ same 16 bit page? */ ++ std 5,__elfinfo@l(14) ++#endif ++ + #ifdef WANT_DYNAMIC + /* #warning dynamic */ + mr 6,7 +diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S +--- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -12,12 +12,23 @@ _start: + + leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ + ++ ++#ifdef WANT_ELFINFO ++#ifdef __DYN_LIB ++ movq environ@GOTPCREL(%rip), %rax ++#else ++ leaq environ(%rip), %rax ++#endif ++ movq %rdx, (%rax) /* environ */ ++ movq %rdx, 8(%rax) /* __elfinfo */ ++#else + #ifdef __DYN_LIB + movq environ@GOTPCREL(%rip), %rax + movq %rdx, (%rax) + #else + movq %rdx, environ(%rip) + #endif ++#endif + + #ifdef PROFILING + pushq %rdi /* save reg args */ +diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S +--- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/s390/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -30,6 +30,11 @@ _start: + l %r1,8(%r13) + st %r4,0(%r1) + ++#ifdef WANT_ELFINFO ++ ahi %r1, 4 # TODO: does it really point to __elfinfo now? ++ st %r4,0(%r1) ++#endif ++ + /* call main or _dyn_start */ + l %r1,0(%r13) + basr %r14,%r1 +diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S +--- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -86,6 +86,15 @@ __environ: + .long 0 + #endif + ++/* __elfinfo must follow __environ immediately */ ++.global __elfinfo ++__elfinfo: ++#if __WORDSIZE == 64 ++ .quad 0 ++#else ++ .long 0 ++#endif ++ + .global fini_entry + fini_entry: + .long 0 +diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S +--- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 ++++ dietlibc-0.31.20080409/mips/start.S 2008-04-12 20:13:10.000000000 +0200 +@@ -47,6 +47,9 @@ __start: + #endif + add $a2, $a2, $a1 + sw $a2, environ ++#ifdef WANT_ELFINFO ++ sw $a2, __elfinfo ++#endif + jalr $25 + la $25, exit + move $4,$2 From f0a88b1bb1f525d078fab3732dae485c589cd645 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:48:12 +0000 Subject: [PATCH 27/65] This patch adds support for uppercase 'F' and 'G' printf format specifiers. It fixes handling of -INF values in __dtostr() too; previously, there was | unsigned int i; | if ((i=isinf(d))) return copystring(buf,maxlen,i>0?"inf":"-inf"); ~~~ which evaluated to true everytime. The copystring() function worked for 3-letter words only but not for '-inf'. The last argument of __dtostr() was changed from a boolean flag to a bitmask. Bit 0 encodes 'g' or 'f', and bit 1 lower-/uppercase. There should be probably added some macros for them; for now, these values are used directly. Please note that this might affect other applications (liblowfat?) too which are using __dtostr(). --- dietlibc-0.31-printFG.patch | 199 ++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 dietlibc-0.31-printFG.patch diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch new file mode 100644 index 0000000..9a11b80 --- /dev/null +++ b/dietlibc-0.31-printFG.patch @@ -0,0 +1,199 @@ +diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/lib/__dtostr.c +--- dietlibc-0.31.20080409/lib/__dtostr.c.printFG 2006-07-04 05:33:02.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 14:41:48.000000000 +0200 +@@ -5,13 +5,15 @@ + + static int copystring(char* buf,int maxlen, const char* s) { + int i; +- for (i=0; i<3&&i0?"inf":"-inf"); +- if (isnan(d)) return copystring(buf,maxlen,"nan"); ++ if ((is_inf=isinf(d))) ++ return copystring(buf,maxlen, ++ (is_inf<0)? ++ (flags&0x02?"-INF":"-inf"): ++ (flags&0x02?"INF":"inf")); ++ if (isnan(d)) return copystring(buf,maxlen,flags&0x02?"NAN":"nan"); + e10=1+(long)(e*0.30102999566398119802); /* log10(2) */ + /* Wir iterieren von Links bis wir bei 0 sind oder maxlen erreicht + * ist. Wenn maxlen erreicht ist, machen wir das nochmal in +@@ -126,7 +133,7 @@ int __dtostr(double d,char *buf,unsigned + if (prec2 || prec>(unsigned int)(buf-oldbuf)+1) { /* more digits wanted */ + if (!maxlen) return 0; --maxlen; + *buf='.'; ++buf; +- if (g) { ++ if ((flags & 0x01)) { + if (prec2) prec=prec2; + prec-=buf-oldbuf-1; + } else { +diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/lib/__v_printf.c +--- dietlibc-0.31.20080409/lib/__v_printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 ++++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 14:41:48.000000000 +0200 +@@ -346,45 +346,49 @@ num_printf: + #ifdef WANT_FLOATING_POINT_IN_PRINTF + /* print a floating point value */ + case 'f': ++ case 'F': + case 'g': ++ case 'G': + { +- int g=(ch=='g'); ++ int flags=(((ch&0x5f)=='G') ? 0x01 : 0x00) | ((ch&0x20) ? 0x00 : 0x02); + double d=va_arg(arg_ptr,double); + s=buf+1; + if (width==0) width=1; + if (!flag_dot) preci=6; + if (flag_sign || d < +0.0) flag_in_sign=1; + +- sz=__dtostr(d,s,sizeof(buf)-1,width,preci,g); ++ sz=__dtostr(d,s,sizeof(buf)-1,width,preci,flags); + +- if (flag_dot) { +- char *tmp; +- if ((tmp=strchr(s,'.'))) { +- if (preci || flag_hash) ++tmp; +- while (preci>0 && *++tmp) --preci; +- *tmp=0; +- } else if (flag_hash) { +- s[sz]='.'; +- s[++sz]='\0'; ++ if (!isnan(d) && !isinf(d)) { /* skip NaN + INF values */ ++ if (flag_dot) { ++ char *tmp; ++ if ((tmp=strchr(s,'.'))) { ++ if (preci || flag_hash) ++tmp; ++ while (preci>0 && *++tmp) --preci; ++ *tmp=0; ++ } else if (flag_hash) { ++ s[sz]='.'; ++ s[++sz]='\0'; ++ } + } +- } + +- if (g) { +- char *tmp,*tmp1; /* boy, is _this_ ugly! */ +- if ((tmp=strchr(s,'.'))) { +- tmp1=strchr(tmp,'e'); +- while (*tmp) ++tmp; +- if (tmp1) tmp=tmp1; +- while (*--tmp=='0') ; +- if (*tmp!='.') ++tmp; +- *tmp=0; +- if (tmp1) strcpy(tmp,tmp1); ++ if ((flags&0x01)) { ++ char *tmp,*tmp1; /* boy, is _this_ ugly! */ ++ if ((tmp=strchr(s,'.'))) { ++ tmp1=strchr(tmp,'e'); ++ while (*tmp) ++tmp; ++ if (tmp1) tmp=tmp1; ++ while (*--tmp=='0') ; ++ if (*tmp!='.') ++tmp; ++ *tmp=0; ++ if (tmp1) strcpy(tmp,tmp1); ++ } + } +- } + +- if ((flag_sign || flag_space) && d>=0) { +- *(--s)=(flag_sign)?'+':' '; +- ++sz; ++ if ((flag_sign || flag_space) && d>=0) { ++ *(--s)=(flag_sign)?'+':' '; ++ ++sz; ++ } + } + + sz=strlen(s); +diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/test/printf.c +--- dietlibc-0.31.20080409/test/printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 ++++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 14:52:36.000000000 +0200 +@@ -2,11 +2,24 @@ + #include + #include + #include ++#include ++#include + #include + #include + + #define ALGN 5 + ++#ifndef INFINITY ++# define INFINITY (DBL_MAX * DBL_MAX) ++#endif ++ ++#ifndef NAN ++# if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) ++# define NAN (__builtin_nan("")) ++# endif ++#endif ++ ++ + // https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112986 + #if 0 + #undef assert +@@ -131,6 +144,23 @@ int main() + TEST("-01234", "%6.5i", -1234); + TEST(" 1234", "%6.5s", "1234"); + ++ TEST("inf", "%f", INFINITY); ++ TEST("-inf", "%f", -INFINITY); ++ TEST("INF", "%F", INFINITY); ++ TEST("-INF", "%F", -INFINITY); ++ ++ TEST("inf", "%g", INFINITY); ++ TEST("-inf", "%g", -INFINITY); ++ TEST("INF", "%G", INFINITY); ++ TEST("-INF", "%G", -INFINITY); ++ ++#ifdef NAN ++ TEST("nan", "%f", NAN); ++ TEST("NAN", "%F", NAN); ++ TEST("nan", "%g", NAN); ++ TEST("NAN", "%G", NAN); ++#endif ++ + #ifdef XSI_TESTS + setlocale(LC_ALL, "de_DE"); + +diff -up dietlibc-0.31.20080409/include/stdlib.h.printFG dietlibc-0.31.20080409/include/stdlib.h +--- dietlibc-0.31.20080409/include/stdlib.h.printFG 2007-09-20 20:51:18.000000000 +0200 ++++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 14:41:48.000000000 +0200 +@@ -28,8 +28,12 @@ long double strtold(const char *nptr, ch + long int strtol(const char *nptr, char **endptr, int base) __THROW; + unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; + ++/* HACK: used flags in __dtostr ++ 0x01 ... 'g' ++ 0x02 ... uppercase ++ Define some constants somewhere... */ + extern int __ltostr(char *s, unsigned int size, unsigned long i, unsigned int base, int UpCase) __THROW; +-extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int g) __THROW; ++extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int flags) __THROW; + + #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L + __extension__ long long int strtoll(const char *nptr, char **endptr, int base) __THROW; From bce265ae6308c5e325ebfe0a111aa4a0f2b54c69 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:49:04 +0000 Subject: [PATCH 28/65] This patch changes the used format for %x and %X specifiers in strptime(3) to match these specified by SUSv2. It adds support for '%F' in strftime(3) too. --- dietlibc-0.31-lcctime.patch | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dietlibc-0.31-lcctime.patch diff --git a/dietlibc-0.31-lcctime.patch b/dietlibc-0.31-lcctime.patch new file mode 100644 index 0000000..a559e9c --- /dev/null +++ b/dietlibc-0.31-lcctime.patch @@ -0,0 +1,28 @@ +diff -up dietlibc-0.31.20080409/libugly/strftime.c.lcctime dietlibc-0.31.20080409/libugly/strftime.c +--- dietlibc-0.31.20080409/libugly/strftime.c.lcctime 2006-08-15 18:07:15.000000000 +0200 ++++ dietlibc-0.31.20080409/libugly/strftime.c 2008-04-13 13:20:41.000000000 +0200 +@@ -55,6 +55,7 @@ again: + case 'x': src = "%b %a %d"; goto _strf; + case 'X': src = "%k:%M:%S"; goto _strf; + case 'D': src = "%m/%d/%y"; goto _strf; ++ case 'F': src = "%Y-%m-%d"; goto _strf; + case 'T': src = "%H:%M:%S"; + _strf: p += strftime (p, (size_t)(dst+max-p), src, tm); break; + case 'a': src = sweekdays [tm->tm_wday]; goto _str; +diff -up dietlibc-0.31.20080409/libugly/strptime.c.lcctime dietlibc-0.31.20080409/libugly/strptime.c +--- dietlibc-0.31.20080409/libugly/strptime.c.lcctime 2007-08-03 22:58:33.000000000 +0200 ++++ dietlibc-0.31.20080409/libugly/strptime.c 2008-04-13 13:13:12.000000000 +0200 +@@ -119,10 +119,11 @@ char* strptime(const char* s,const char* + ++s; + break; + case 'x': +- s=strptime(s,"%b %a %d",tm); ++ /* see SUSv2, Ch.7 "LC_TIME Category in the POSIX Locale" */ ++ s=strptime(s,"%m/%d/%y",tm); + break; + case 'X': +- s=strptime(s,"%k:%M:%S",tm); ++ s=strptime(s,"%H:%M:%S",tm); + break; + case 'y': + i=getint(&s,2); From 1b0354a6775546c6fd47e1fd3c5f87b7e8c5dd38 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:49:56 +0000 Subject: [PATCH 29/65] The tst-fseek testsuite is bogus on 64 bit platforms because the *stat64 functions/structures are not available there. This patch defines '_FILE_OFFSET_BITS 64' and uses the plain *stat instead of. --- dietlibc-0.31-stat64.patch | 88 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 dietlibc-0.31-stat64.patch diff --git a/dietlibc-0.31-stat64.patch b/dietlibc-0.31-stat64.patch new file mode 100644 index 0000000..d043d84 --- /dev/null +++ b/dietlibc-0.31-stat64.patch @@ -0,0 +1,88 @@ +diff -up dietlibc-0.31.20080409/test/stdio/tst-fseek.c.stat64 dietlibc-0.31.20080409/test/stdio/tst-fseek.c +--- dietlibc-0.31.20080409/test/stdio/tst-fseek.c.stat64 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdio/tst-fseek.c 2008-04-12 21:17:47.000000000 +0200 +@@ -19,6 +19,7 @@ + 02111-1307 USA. */ + + #define _GNU_SOURCE ++#define _FILE_OFFSET_BITS 64 + #include + #include + #include +@@ -38,8 +39,8 @@ main (void) + const char outstr[] = "hello world!\n"; + char strbuf[sizeof outstr]; + char buf[200]; +- struct stat64 st1; +- struct stat64 st2; ++ struct stat st1; ++ struct stat st2; + int result = 0; + + tmpdir = getenv ("TMPDIR"); +@@ -315,9 +316,9 @@ main (void) + } + + /* Check the access time. */ +- if (fstat64 (fd, &st1) < 0) ++ if (fstat (fd, &st1) < 0) + { +- printf ("%d: fstat64() before fseeko() failed\n\n", __LINE__); ++ printf ("%d: fstat() before fseeko() failed\n\n", __LINE__); + result = 1; + } + else +@@ -338,9 +339,9 @@ main (void) + sleep (1); + t = time (NULL); + +- if (fstat64 (fd, &st2) < 0) ++ if (fstat (fd, &st2) < 0) + { +- printf ("%d: fstat64() after fseeko() failed\n\n", __LINE__); ++ printf ("%d: fstat() after fseeko() failed\n\n", __LINE__); + result = 1; + } + if (st1.st_ctime >= t) +@@ -424,9 +425,9 @@ main (void) + printf ("%d: fopen() failed\n\n", __LINE__); + result = 1; + } +- else if (fstat64 (fileno (fp), &st1) < 0) ++ else if (fstat (fileno (fp), &st1) < 0) + { +- printf ("%d: fstat64() before fseeko() failed\n\n", __LINE__); ++ printf ("%d: fstat() before fseeko() failed\n\n", __LINE__); + result = 1; + } + else if (fseeko (fp, 0, SEEK_END) != 0) +@@ -436,7 +437,7 @@ main (void) + } + else if (ftello (fp) != st1.st_size) + { +- printf ("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, ++ printf ("%d: fstat st_size %zd ftello %zd\n", __LINE__, + (size_t) st1.st_size, (size_t) ftello (fp)); + result = 1; + } +@@ -451,9 +452,9 @@ main (void) + printf ("%d: fopen() failed\n\n", __LINE__); + result = 1; + } +- else if (fstat64 (fileno (fp), &st1) < 0) ++ else if (fstat (fileno (fp), &st1) < 0) + { +- printf ("%d: fstat64() before fgetc() failed\n\n", __LINE__); ++ printf ("%d: fstat() before fgetc() failed\n\n", __LINE__); + result = 1; + } + else if (fgetc (fp) == EOF) +@@ -468,7 +469,7 @@ main (void) + } + else if (ftello (fp) != st1.st_size) + { +- printf ("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, ++ printf ("%d: fstat st_size %zd ftello %zd\n", __LINE__, + (size_t) st1.st_size, (size_t) ftello (fp)); + result = 1; + } From 68a7e0f0a98c83e8310aa083b49d5cb90283fae8 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:50:40 +0000 Subject: [PATCH 30/65] This patch fixes/enhances the testsuite: I removed the checks which called endmntent() multiple times resp. with a NULL pointer. Behavior in first case is undefined and latter causes a segfault (I could not find documentation that this is allowed). Hence, it does not make sense to test this. test 'malloc(0)' only, when WANT_MALLOC_ZERO is set the '%Zu' printf format specifier is bogus (from libc5 ages). I replaced it with the '%zu' one. Please note, that this test still fails because it uses glibc specific features. removed tests which set a non-C locale. Broken usage of 'strptime()' result was fixed too. This test should succeed now. this test was added while working on the '%F/%G' patch and verifies the isinf() + isnan() functions. Please see http://cvs.fedora.redhat.com/viewcvs/rpms/dietlibc/devel/runtests-X.sh?root =extras&view=markup for tests which are known to be broken. --- dietlibc-0.31-testsuite.patch | 176 ++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 dietlibc-0.31-testsuite.patch diff --git a/dietlibc-0.31-testsuite.patch b/dietlibc-0.31-testsuite.patch new file mode 100644 index 0000000..59ea16d --- /dev/null +++ b/dietlibc-0.31-testsuite.patch @@ -0,0 +1,176 @@ +diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.20080409/test/getmntent.c +--- dietlibc-0.31.20080409/test/getmntent.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 15:49:19.000000000 +0200 +@@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { + + printf("closing /etc/fstab\n"); + assert ( 1 == endmntent(fstab)); +- printf("closing /etc/fstab again\n"); +- assert ( 1 == endmntent(fstab)); /* endmntent must always return 1 */ +- printf("entmntent(0)\n"); +- assert ( 1 == endmntent(0)); /* causes a segfault with diet libc */ ++ + return 0; + } +- +diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.20080409/test/runtests.sh +--- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 14:54:58.000000000 +0200 +@@ -1,6 +1,6 @@ + SUBDIRS="dirent inet stdio string stdlib time" + +-TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" ++TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" + + STDIN="read1" + PASS="getpass" +diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/test/Makefile +--- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 14:54:58.000000000 +0200 +@@ -10,7 +10,7 @@ LCOMPAT=-lcompat + TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ + fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ + gethostbyname_r getmntent getopt getpass getpwnam getservbyname getservbyport getusershell \ +-glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ ++glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness \ + memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ + protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ + speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ +diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-malloc.c +--- dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 14:54:58.000000000 +0200 +@@ -21,13 +21,15 @@ + #include + #include + ++#include "../../dietfeatures.h" ++ + static int errors = 0; + + static void + merror (const char *msg) + { + ++errors; +- printf ("Error: %s\n", msg); ++ fprintf (stderr, "Error: %s\n", msg); + } + + int +@@ -56,9 +58,11 @@ main (void) + if (p != NULL) + merror ("realloc (p, 0) failed."); + ++#ifdef WANT_MALLOC_ZERO + p = malloc (0); + if (p == NULL) + merror ("malloc (0) failed."); ++#endif + + p = realloc (p, 0); + if (p != NULL) +diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strftime.c +--- dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 14:54:58.000000000 +0200 +@@ -49,18 +49,18 @@ int main (void) { + + if (res == 0) + { +- printf ("%Zu: %s: res == 0 despite size == %Zu\n", ++ printf ("%zu: %s: res == 0 despite size == %zu\n", + cnt, tests[cnt].fmt, size); + result = 1; + } + else if (size < tests[cnt].min) + { +- printf ("%Zu: %s: size == %Zu was enough\n", ++ printf ("%zu: %s: size == %zu was enough\n", + cnt, tests[cnt].fmt, size); + result = 1; + } + else +- printf ("%Zu: %s: size == %Zu: OK\n", cnt, tests[cnt].fmt, size); ++ printf ("%zu: %s: size == %zu: OK\n", cnt, tests[cnt].fmt, size); + + free (buf); + } +diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strptime.c +--- dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 14:54:58.000000000 +0200 +@@ -41,10 +41,12 @@ static const struct + { "C", "03/03/00", "%D", 5, 62, 2, 3 }, + { "C", "9/9/99", "%x", 4, 251, 8, 9 }, + { "C", "19990502123412", "%Y%m%d%H%M%S", 0, 121, 4, 2 }, ++#if 0 /* dietlibc does not support %U/%W/%j and non-POSIX locales */ + { "C", "2001 20 Mon", "%Y %U %a", 1, 140, 4, 21 }, + { "C", "2001 21 Mon", "%Y %W %a", 1, 140, 4, 21 }, + { "ja_JP.EUC-JP", "2001 20 \xb7\xee", "%Y %U %a", 1, 140, 4, 21 }, + { "ja_JP.EUC-JP", "2001 21 \xb7\xee", "%Y %W %a", 1, 140, 4, 21 }, ++#endif + }; + + +@@ -72,9 +74,16 @@ test_tm (void) + + for (i = 0; i < sizeof (tm_tests) / sizeof (tm_tests[0]); ++i) + { ++ char *pres; + memset (&tm, '\0', sizeof (tm)); +- +- if (strptime (tm_tests[i].input, tm_tests[i].format, &tm) != '\0') ++ ++ pres = strptime (tm_tests[i].input, tm_tests[i].format, &tm); ++ if (!pres) ++ { ++ fprintf(stderr, "failed to parse '%s'\n", day_tests[i].input); ++ result = 1; ++ } ++ else if (*pres != '\0') + { + printf ("not all of `%s' read\n", tm_tests[i].input); + result = 1; +@@ -118,6 +127,7 @@ int main (void) { + + for (i = 0; i < sizeof (day_tests) / sizeof (day_tests[0]); ++i) + { ++ char *pres; + memset (&tm, '\0', sizeof (tm)); + + if (setlocale (LC_ALL, day_tests[i].locale) == NULL) +@@ -125,7 +135,14 @@ int main (void) { + printf ("cannot set locale %s: %m\n", day_tests[i].locale); + } + +- if (*strptime (day_tests[i].input, day_tests[i].format, &tm) != '\0') ++ pres = strptime (day_tests[i].input, day_tests[i].format, &tm); ++ if (!pres) ++ { ++ fprintf(stderr, "failed to parse '%s' for locale '%s'\n", ++ day_tests[i].input, day_tests[i].locale); ++ result = 1; ++ } ++ else if (*pres != '\0') + { + printf ("not all of `%s' read\n", day_tests[i].input); + result = 1; +diff -up /dev/null dietlibc-0.31.20080409/test/math.c +--- /dev/null 2008-03-18 07:40:22.289057188 +0100 ++++ dietlibc-0.31.20080409/test/math.c 2008-04-13 14:54:58.000000000 +0200 +@@ -0,0 +1,18 @@ ++#include ++#include ++#include ++ ++int main() ++{ ++#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) ++ assert(isinf(__builtin_inff())==1); ++ assert(isinf(-__builtin_inff())==-1); ++ assert(isnan(__builtin_nan(""))); ++#endif ++ ++ assert(isinf((DBL_MAX * DBL_MAX))==1); ++ assert(isinf(-(DBL_MAX * DBL_MAX))==-1); ++ //assert(isnan(nan(""))); ++ ++ return 0; ++} From 86a8b815b64cf19b98ff0c68e0aedc7c69d3e035 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:51:17 +0000 Subject: [PATCH 31/65] registered test which are known to be broken resp. which test for features known to be broken. --- runtests-X.sh | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/runtests-X.sh b/runtests-X.sh index abfc78d..d5b8a65 100644 --- a/runtests-X.sh +++ b/runtests-X.sh @@ -2,14 +2,57 @@ eval $(grep '^\(TESTPROGRAMS\|SUBDIRS\)=' runtests.sh) +FAILURES_BOGUS=( + ":stdlib:tst-environ" # test uses environ function in unsupported ways (dup keys) + ":stdlib:tst-rand48" # platform dependent; does not give reliable results + ":stdlib:tst-strtod" # must be investigated further... + ":time:tst-mktime" # dietlibc does not support $TZ env + ":time:tst-posixtz" # dietlibc does not support $TZ env + ":time:tst-strftime" # dietlibc does not support glibc specific format specifications +) + +FAILURES_KNOWN=( + ":sendfile" # stdin/stdout not supported; test must be wrapped + ":stdio:tstdiomisc" # scanf(3) fails on some constructs + ":stdio:tst-fphex" # printf(3) does not support %a specifiers + ":stdio:tst-printf" # printf(3) does not support some floating point ops + ":stdio:tst-sscanf" # scanf(3) fails on double input + ":stdlib:test-canon" # realpath(3) is broken... +) + +function is_in() { + local val=$1 + local i + shift + + for i; do + test x"$i" != x"$val" || return 0 + done + return 1 +} + rc=0 : ${RUNTEST_INDENT=0} export RUNTEST_INDENT +export RUNTEST_NS for p in $TESTPROGRAMS; do ! tty -s || printf '%*s%-20s' $RUNTEST_INDENT '' "$p" - ./$p >/dev/null && res='OK' || { res='FAIL'; let ++rc; } + + is_in "$RUNTEST_NS:$p" "${FAILURES_BOGUS[@]}" && fail_bogus=true || fail_bogus=false + is_in "$RUNTEST_NS:$p" "${FAILURES_KNOWN[@]}" && fail_known=true || fail_known=false + ./$p >/dev/null && failed=false || failed=true + + case $failed:$fail_known:$fail_bogus in + (false:false:*) res='OK';; + (false:true:true) res='OK (bogus)';; + (false:true:false) res="OK (unexpected)"; let ++rc;; + (true:*:true) res='FAIL (bogus)';; + (true:true:*) res="FAIL (known)";; + (true:false:*) res='FAIL'; let ++rc;; + esac + ! tty -s || printf '\r' printf '%*s%-20s%s\n' $RUNTEST_INDENT '' "$p" "$res" @@ -21,7 +64,12 @@ test $rc -eq 0 || \ for d in $SUBDIRS; do echo "--- entering directory $d ---" let RUNTEST_INDENT+=2 + old_ns=$RUNTEST_NS + RUNTEST_NS=$RUNTEST_NS:$d + cd $d && bash ./runtests-X.sh || let ++rc + + RUNTEST_NS=$old_ns let RUNTEST_INDENT-=2 cd $OLDPWD || exit 1 From 5615219752c486c4ec6fb8ef5f2f3c33ca923bf7 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:52:22 +0000 Subject: [PATCH 32/65] - whitespace cleanups - use gnu-style - added __pure attribute to __get_elf_aux_value() --- dietlibc-0.31-pagesize.patch | 224 +++++++++++++++++------------------ 1 file changed, 112 insertions(+), 112 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index b29fbff..06745d9 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c --- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 16:03:45.000000000 +0200 @@ -4,16 +4,18 @@ #include #include @@ -24,7 +24,7 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c --- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 16:03:45.000000000 +0200 @@ -14,7 +14,7 @@ #ifndef WANT_LARGEFILE_BACKCOMPAT struct dirent64* readdir64(DIR *d) { @@ -54,7 +54,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/ trygetdents64=0; diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c --- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 16:03:45.000000000 +0200 @@ -5,6 +5,8 @@ #include #include @@ -75,7 +75,7 @@ diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/li lose: diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c --- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 16:03:45.000000000 +0200 @@ -5,7 +5,7 @@ struct dirent* readdir(DIR *d) { @@ -87,7 +87,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/li } diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c --- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 16:03:45.000000000 +0200 @@ -4,8 +4,10 @@ #include #include @@ -102,7 +102,7 @@ diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/l } diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c --- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 16:03:45.000000000 +0200 @@ -18,8 +18,7 @@ #include #include @@ -124,7 +124,7 @@ diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/ /* a simple mmap :) */ diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S --- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -31,6 +31,12 @@ _start: lis 14,environ@ha stw 5,environ@l(14) @@ -140,7 +140,7 @@ diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/ bl _dyn_start diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h --- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 -+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 16:03:45.000000000 +0200 @@ -126,6 +126,16 @@ /* #define WANT_SSP_XOR */ @@ -169,7 +169,7 @@ diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/d #endif diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile --- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 16:03:45.000000000 +0200 @@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ @@ -181,7 +181,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/te diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-12 20:19:28.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 16:09:57.000000000 +0200 @@ -0,0 +1,80 @@ +#include +#include @@ -193,79 +193,79 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c + +static long exec_getconf(char const *var) +{ -+ char buf[128]; -+ pid_t pid; -+ int fd[2]; -+ int status; -+ ssize_t l; ++ char buf[128]; ++ pid_t pid; ++ int fd[2]; ++ int status; ++ ssize_t l; + -+ if (pipe(fd)<0 || (pid = fork())<0) -+ abort(); ++ if (pipe(fd)<0 || (pid = fork())<0) ++ abort(); + -+ if (pid==0) { -+ close(fd[0]); -+ -+ if (fd[1]!=1) { -+ dup2(fd[1], 1); -+ close(fd[1]); -+ } ++ if (pid==0) { ++ close(fd[0]); + -+ execlp("getconf", "getconf", var, NULL); -+ _exit(1); -+ } ++ if (fd[1]!=1) { ++ dup2(fd[1], 1); ++ close(fd[1]); ++ } + -+ close(fd[1]); -+ l = read(fd[0], buf, sizeof(buf)-1); -+ if (l<0) { -+ perror("read()"); -+ goto err; -+ } else if (l==sizeof(buf)-1) -+ goto err; -+ close(fd[0]); ++ execlp("getconf", "getconf", var, NULL); ++ _exit(1); ++ } + -+ buf[l] = '\0'; -+ -+ if (waitpid(pid, &status, 0)<0) -+ goto err; ++ close(fd[1]); ++ l = read(fd[0], buf, sizeof(buf)-1); ++ if (l<0) { ++ perror("read()"); ++ goto err; ++ } else if (l==sizeof(buf)-1) ++ goto err; ++ close(fd[0]); + -+ if (!WIFEXITED(status) || WEXITSTATUS(status)!=0) -+ goto err; ++ buf[l] = '\0'; + -+ return strtol(buf, NULL, 10); ++ if (waitpid(pid, &status, 0)<0) ++ goto err; + -+err: -+ kill(pid, SIGKILL); -+ abort(); ++ if (!WIFEXITED(status) || WEXITSTATUS(status)!=0) ++ goto err; ++ ++ return strtol(buf, NULL, 10); ++ ++ err: ++ kill(pid, SIGKILL); ++ abort(); +} + +static unsigned int do_check(char const *var, long exp) +{ -+ long cur = exec_getconf(var); ++ long cur = exec_getconf(var); + -+ if (cur!=exp) { -+ fprintf(stderr, "%s mismatch: got %ld, expected %ld\n", -+ cur, exp); -+ return 1; -+ } ++ if (cur!=exp) { ++ fprintf(stderr, "%s mismatch: got %ld, expected %ld\n", ++ cur, exp); ++ return 1; ++ } + -+ return 0; ++ return 0; +} + +int main(int argc, char *argv[]) +{ -+ unsigned int err = 0; ++ unsigned int err = 0; + -+ assert(sysconf(_SC_PAGESIZE) == __DIET_PAGE_SIZE); -+ assert(__DIET_PAGE_SIZE == (1<<__DIET_PAGE_SHIFT)); ++ assert(sysconf(_SC_PAGESIZE) == __DIET_PAGE_SIZE); ++ assert(__DIET_PAGE_SIZE == (1<<__DIET_PAGE_SHIFT)); + -+ err += do_check("PAGE_SIZE", sysconf(_SC_PAGESIZE)); -+ err += do_check("CLK_TCK", sysconf(_SC_CLK_TCK)); ++ err += do_check("PAGE_SIZE", sysconf(_SC_PAGESIZE)); ++ err += do_check("CLK_TCK", sysconf(_SC_CLK_TCK)); + -+ return err; ++ return err; +} diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh --- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 16:03:45.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -276,7 +276,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409 PASS="getpass" diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S --- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 stx %o2, [%o3] @@ -291,7 +291,7 @@ diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/ registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c --- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 16:08:03.000000000 +0200 @@ -3,6 +3,8 @@ #include #include @@ -306,11 +306,11 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 } case _SC_CLK_TCK: +#ifdef WANT_ELFINFO -+ { -+ elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); -+ if (v) -+ return *v; -+ } ++ { ++ elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); ++ if (v) ++ return *v; ++ } +#endif + #ifdef __alpha__ @@ -331,36 +331,36 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 return ARG_MAX; diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 16:06:57.000000000 +0200 @@ -0,0 +1,25 @@ +#include +#include "../dietelfinfo.h" + +elf_addr_t *__get_elf_aux_value(unsigned int tag) +{ -+ extern char ** __elfinfo; -+ elf_addr_t *aux_ptr; -+ char ** tmp; ++ extern char ** __elfinfo; ++ elf_addr_t *aux_ptr; ++ char ** tmp; + -+ /* External symbol points to 'environ' after startup. Now, go the end -+ * of 'environ'; the auxiliary ELF table is located immediately after -+ * this position */ ++ /* External symbol points to 'environ' after startup. Now, go the end ++ * of 'environ'; the auxiliary ELF table is located immediately after ++ * this position */ + -+ /* operate on tmp instead of __elfinfo to be thread safe */ -+ tmp = __elfinfo; -+ while (*tmp) -+ ++tmp; -+ __elfinfo = tmp; ++ /* operate on tmp instead of __elfinfo to be thread safe */ ++ tmp = __elfinfo; ++ while (*tmp) ++ ++tmp; ++ __elfinfo = tmp; + -+ for (aux_ptr = (elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) -+ if (aux_ptr[0]==tag) -+ return aux_ptr+1; ++ for (aux_ptr = (elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) ++ if (aux_ptr[0]==tag) ++ return aux_ptr+1; + -+ return NULL; ++ return NULL; +} diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c --- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-12 20:15:33.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 16:07:23.000000000 +0200 @@ -2,14 +2,25 @@ #include #include @@ -375,19 +375,19 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 size_t __libc_getpagesize(void) { - return PAGE_SIZE; +#ifdef WANT_DYN_PAGESIZE -+ static size_t pgsz; ++ static size_t pgsz; + -+ if (__unlikely(pgsz==0)) { -+ elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); -+ if (__likely(v)) -+ pgsz = *v; -+ else -+ pgsz = __DIET_PAGE_SIZE_PREDEF; -+ } ++ if (__unlikely(pgsz==0)) { ++ elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); ++ if (__likely(v)) ++ pgsz = *v; ++ else ++ pgsz = __DIET_PAGE_SIZE_PREDEF; ++ } + -+ return pgsz; ++ return pgsz; +#else -+ return __DIET_PAGE_SIZE_PREDEF; ++ return __DIET_PAGE_SIZE_PREDEF; +#endif } @@ -395,7 +395,7 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 - diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-12 20:22:45.000000000 +0200 ++++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 16:03:45.000000000 +0200 @@ -0,0 +1,31 @@ +#ifndef H_DIETLIBC_DIETPAGESIZE_H +#define H_DIETLIBC_DIETPAGESIZE_H @@ -430,7 +430,7 @@ diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +#endif /* H_DIETLIBC_DIETPAGESIZE_H */ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S --- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -26,6 +26,11 @@ _start: larl %r13,environ stg %r4,0(%r13) @@ -445,7 +445,7 @@ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s3 brasl %r14,_dyn_start diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 16:04:33.000000000 +0200 @@ -0,0 +1,9 @@ +#include "dietfeatures.h" + @@ -454,11 +454,11 @@ diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h +#include + +elf_addr_t * __get_elf_aux_value(unsigned int tag) -+ __attribute__((__visibility__("hidden"),__const__)); ++ __attribute__((__visibility__("hidden"),__const__)) __pure; +#endif diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S --- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -40,6 +40,11 @@ _start: ;; st8 [r14] = out2 /* store envp in environ */ @@ -473,7 +473,7 @@ diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia6 br.call.sptk.few rp = _dyn_start diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S --- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/i386/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -25,6 +25,10 @@ _start: PIC_INIT /* non-PIC: this is an empty line */ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ @@ -487,7 +487,7 @@ diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i38 pushl $.text diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h --- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 16:03:45.000000000 +0200 @@ -1,8 +1,12 @@ #include @@ -504,7 +504,7 @@ diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/die +#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S --- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -24,6 +24,10 @@ _start: stq $18, environ @@ -518,7 +518,7 @@ diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/al mov $0, $19 /* mov v0(dynload) to a3 */ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S --- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 -+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 16:03:45.000000000 +0200 @@ -1,6 +1,7 @@ .section ".bss" .align 8 @@ -552,7 +552,7 @@ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.2008 +#endif diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S --- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/arm/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -23,11 +23,15 @@ _start: #ifdef __DYN_LIB ldr sl, .L4 @@ -579,7 +579,7 @@ diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/ - diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S --- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -34,6 +34,11 @@ _start: ldil LP%environ, %r19 ldo RP%environ(%r19), %r19 @@ -594,7 +594,7 @@ diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/p diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h --- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 -+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 16:03:45.000000000 +0200 @@ -60,15 +60,6 @@ struct shm_info { unsigned long swap_successes; }; @@ -613,7 +613,7 @@ diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.2008040 extern int shmdt (const void *shmaddr) __THROW; diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S --- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 st %o2, [%o3] @@ -628,7 +628,7 @@ diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sp registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c --- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 16:03:45.000000000 +0200 @@ -3,17 +3,15 @@ #include #include @@ -652,7 +652,7 @@ diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sp } diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S --- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -58,6 +58,12 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) @@ -668,7 +668,7 @@ diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/pp mr 6,7 diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S --- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -12,12 +12,23 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -695,7 +695,7 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x pushq %rdi /* save reg args */ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S --- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -30,6 +30,11 @@ _start: l %r1,8(%r13) st %r4,0(%r1) @@ -710,7 +710,7 @@ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s39 basr %r14,%r1 diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S --- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 16:03:45.000000000 +0200 @@ -86,6 +86,15 @@ __environ: .long 0 #endif @@ -729,7 +729,7 @@ diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20 .long 0 diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S --- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/mips/start.S 2008-04-12 20:13:10.000000000 +0200 ++++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 16:03:45.000000000 +0200 @@ -47,6 +47,9 @@ __start: #endif add $a2, $a2, $a1 From 41c93d50ded8e9d10f05050b7f342e875cb04c1a Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:53:31 +0000 Subject: [PATCH 33/65] - added patch for dynamic PAGE_SIZE support - fixed/enhanced testsuite and removed the '|| :' in %%check - improved/fixed floating point support *printf(3) --- dietlibc.spec | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index ec324c1..4ca67e8 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -30,7 +30,7 @@ Summary: Small libc implementation Name: dietlibc Version: 0.31 -Release: %release_func 1%{?snapshot:.%snapshot} +Release: %release_func 2%{?snapshot:.%snapshot} License: GPL Group: Development/Libraries URL: http://www.fefe.de/dietlibc/ @@ -50,6 +50,11 @@ Patch31: dietlibc-0.31-defpath.patch Patch32: dietlibc-0.31-stacksmash.patch Patch33: dietlibc-0.31-stacksmash-dyn.patch Patch41: dietlibc-0.31.20080212-teststdout.patch +Patch43: dietlibc-0.31-pagesize.patch +Patch44: dietlibc-0.31-printFG.patch +Patch45: dietlibc-0.31-stat64.patch +Patch46: dietlibc-0.31-testsuite.patch +Patch47: dietlibc-0.31-lcctime.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -99,6 +104,11 @@ This package contains the dynamic libraries for dietlibc. %patch33 -p1 -b .stacksmash-dyn %patch41 -p1 -b .teststdout +%patch43 -p1 -b .pagesize +%patch44 -p1 -b .printFG +%patch45 -p1 -b .stat64 +%patch46 -p1 -b .testsuite +%patch47 -p1 -b .lcctime %if %{without ssp} @@ -110,6 +120,14 @@ sed -i -e 's!^#define WANT_SSP$!// \0!g; %global xtra_fixcflags %nil %endif +%ifarch %ix86 +sed -i \ + -e '/#define WANT_DYN_PAGESIZE/{c\' \ + -e '#define WANT_ELFINFO' \ + -e '}' \ + dietfeatures.h +%endif + sed -i -e 's!strip !: !g' Makefile %global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 @@ -147,7 +165,7 @@ make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) cd test ulimit -m $[ 50*1024 ] -v $[ 100*1024 ] -d $[ 50*1024 ] -bash ./runtests-X.sh || : +bash ./runtests-X.sh %clean @@ -178,6 +196,11 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Sun Apr 13 2008 Enrico Scholz - 0.31-2.20080409 +- added patch for dynamic PAGE_SIZE support +- fixed/enhanced testsuite and removed the '|| :' in %%check +- improved/fixed floating point support *printf(3) + * Thu Apr 10 2008 Enrico Scholz - 0.31-1.20080409 - updated to CVS snapshot 20080409 From 50871bf630c891ce4fe6a9c09271129a77ed566f Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:54:38 +0000 Subject: [PATCH 34/65] lib/alloc.c: return value of__ind_shift() depends on PAGE_SIZE --- dietlibc-0.31-pagesize.patch | 77 ++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index 06745d9..6077d15 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c --- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 18:57:47.000000000 +0200 @@ -4,16 +4,18 @@ #include #include @@ -24,7 +24,7 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c --- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 18:57:47.000000000 +0200 @@ -14,7 +14,7 @@ #ifndef WANT_LARGEFILE_BACKCOMPAT struct dirent64* readdir64(DIR *d) { @@ -54,7 +54,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/ trygetdents64=0; diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c --- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 18:57:47.000000000 +0200 @@ -5,6 +5,8 @@ #include #include @@ -75,7 +75,7 @@ diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/li lose: diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c --- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 18:57:47.000000000 +0200 @@ -5,7 +5,7 @@ struct dirent* readdir(DIR *d) { @@ -87,7 +87,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/li } diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c --- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 18:57:47.000000000 +0200 @@ -4,8 +4,10 @@ #include #include @@ -102,7 +102,7 @@ diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/l } diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c --- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 18:57:47.000000000 +0200 @@ -18,8 +18,7 @@ #include #include @@ -122,9 +122,20 @@ diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/ #define PAGE_ALIGN(s) (((s)+MEM_BLOCK_SIZE-1)&(unsigned long)(~(MEM_BLOCK_SIZE-1))) /* a simple mmap :) */ +@@ -66,7 +65,9 @@ static __alloc_t* __small_mem[8]; + + #define FIRST_SMALL(p) (((unsigned long)(p))&(~(MEM_BLOCK_SIZE-1))) + +-static inline int __ind_shift() { return (MEM_BLOCK_SIZE==4096)?4:5; } ++static inline int __ind_shift() { ++ return __DIET_PAGE_SHIFT - sizeof(__small_mem)/sizeof(__small_mem[0]); ++} + + static size_t REGPARM(1) get_index(size_t _size) { + register size_t idx=0; diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S --- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -31,6 +31,12 @@ _start: lis 14,environ@ha stw 5,environ@l(14) @@ -140,7 +151,7 @@ diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/ bl _dyn_start diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h --- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 -+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 18:57:47.000000000 +0200 @@ -126,6 +126,16 @@ /* #define WANT_SSP_XOR */ @@ -169,7 +180,7 @@ diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/d #endif diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile --- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 18:57:47.000000000 +0200 @@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ @@ -181,7 +192,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/te diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 16:09:57.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 18:57:47.000000000 +0200 @@ -0,0 +1,80 @@ +#include +#include @@ -265,7 +276,7 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c +} diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh --- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 18:57:47.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -276,7 +287,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409 PASS="getpass" diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S --- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 stx %o2, [%o3] @@ -291,7 +302,7 @@ diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/ registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c --- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 16:08:03.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 18:57:47.000000000 +0200 @@ -3,6 +3,8 @@ #include #include @@ -331,7 +342,7 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 return ARG_MAX; diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 16:06:57.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 18:57:47.000000000 +0200 @@ -0,0 +1,25 @@ +#include +#include "../dietelfinfo.h" @@ -360,7 +371,7 @@ diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c +} diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c --- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 16:07:23.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 18:57:47.000000000 +0200 @@ -2,14 +2,25 @@ #include #include @@ -395,7 +406,7 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 - diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 18:57:47.000000000 +0200 @@ -0,0 +1,31 @@ +#ifndef H_DIETLIBC_DIETPAGESIZE_H +#define H_DIETLIBC_DIETPAGESIZE_H @@ -430,7 +441,7 @@ diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +#endif /* H_DIETLIBC_DIETPAGESIZE_H */ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S --- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -26,6 +26,11 @@ _start: larl %r13,environ stg %r4,0(%r13) @@ -445,7 +456,7 @@ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s3 brasl %r14,_dyn_start diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 16:04:33.000000000 +0200 ++++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 18:57:47.000000000 +0200 @@ -0,0 +1,9 @@ +#include "dietfeatures.h" + @@ -458,7 +469,7 @@ diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h +#endif diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S --- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -40,6 +40,11 @@ _start: ;; st8 [r14] = out2 /* store envp in environ */ @@ -473,7 +484,7 @@ diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia6 br.call.sptk.few rp = _dyn_start diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S --- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -25,6 +25,10 @@ _start: PIC_INIT /* non-PIC: this is an empty line */ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ @@ -487,7 +498,7 @@ diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i38 pushl $.text diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h --- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 18:57:47.000000000 +0200 @@ -1,8 +1,12 @@ #include @@ -504,7 +515,7 @@ diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/die +#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S --- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -24,6 +24,10 @@ _start: stq $18, environ @@ -518,7 +529,7 @@ diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/al mov $0, $19 /* mov v0(dynload) to a3 */ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S --- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 -+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 18:57:47.000000000 +0200 @@ -1,6 +1,7 @@ .section ".bss" .align 8 @@ -552,7 +563,7 @@ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.2008 +#endif diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S --- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -23,11 +23,15 @@ _start: #ifdef __DYN_LIB ldr sl, .L4 @@ -579,7 +590,7 @@ diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/ - diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S --- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -34,6 +34,11 @@ _start: ldil LP%environ, %r19 ldo RP%environ(%r19), %r19 @@ -594,7 +605,7 @@ diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/p diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h --- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 -+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 18:57:47.000000000 +0200 @@ -60,15 +60,6 @@ struct shm_info { unsigned long swap_successes; }; @@ -613,7 +624,7 @@ diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.2008040 extern int shmdt (const void *shmaddr) __THROW; diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S --- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 st %o2, [%o3] @@ -628,7 +639,7 @@ diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sp registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c --- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 18:57:47.000000000 +0200 @@ -3,17 +3,15 @@ #include #include @@ -652,7 +663,7 @@ diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sp } diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S --- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -58,6 +58,12 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) @@ -668,7 +679,7 @@ diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/pp mr 6,7 diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S --- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -12,12 +12,23 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -695,7 +706,7 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x pushq %rdi /* save reg args */ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S --- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -30,6 +30,11 @@ _start: l %r1,8(%r13) st %r4,0(%r1) @@ -710,7 +721,7 @@ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s39 basr %r14,%r1 diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S --- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 18:57:47.000000000 +0200 @@ -86,6 +86,15 @@ __environ: .long 0 #endif @@ -729,7 +740,7 @@ diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20 .long 0 diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S --- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 16:03:45.000000000 +0200 ++++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 18:57:47.000000000 +0200 @@ -47,6 +47,9 @@ __start: #endif add $a2, $a2, $a1 From f2d4a1c5927384066c02195d894e84ab9cfa8f62 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:55:49 +0000 Subject: [PATCH 35/65] added debugging code for PPC --- dietlibc.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index 4ca67e8..3ed0e8a 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -164,7 +164,13 @@ make %makeflags -C test all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) - make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) || : cd test -ulimit -m $[ 50*1024 ] -v $[ 100*1024 ] -d $[ 50*1024 ] +ulimit -m $[ 128*1024 ] -v $[ 256*1024 ] -d $[ 128*1024 ] + +readelf -a ./ftw || : +objdump -d ./ftw || : +./ftw || : +dmesg | tail || : + bash ./runtests-X.sh From 0e373c0fe906c6555fbe3e6506623be8e1f15fff Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:57:05 +0000 Subject: [PATCH 36/65] added 'gethostbyname' to list of bogus checks --- runtests-X.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runtests-X.sh b/runtests-X.sh index d5b8a65..eaa2d93 100644 --- a/runtests-X.sh +++ b/runtests-X.sh @@ -3,6 +3,8 @@ eval $(grep '^\(TESTPROGRAMS\|SUBDIRS\)=' runtests.sh) FAILURES_BOGUS=( + ":gethostbyname" # network test; net might not be available in test environment + ":stdlib:tst-environ" # test uses environ function in unsupported ways (dup keys) ":stdlib:tst-rand48" # platform dependent; does not give reliable results ":stdlib:tst-strtod" # must be investigated further... From 5b4c7bb1576d8d61fefb273eaac50f5e7793e4de Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:58:10 +0000 Subject: [PATCH 37/65] further debugging... --- dietlibc.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 3ed0e8a..d65d307 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -60,7 +60,7 @@ BuildRoot: %_tmppath/%name-%version-%release-buildroot %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} Requires: %name-devel = %version-%release - +BuildRequires: gdb %package devel Summary: dietlibc development files @@ -168,9 +168,11 @@ ulimit -m $[ 128*1024 ] -v $[ 256*1024 ] -d $[ 128*1024 ] readelf -a ./ftw || : objdump -d ./ftw || : -./ftw || : +gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'q' || : dmesg | tail || : +sleep 60 + bash ./runtests-X.sh From ddc3ce010e0ddafedef1017fd1992ef5c443b5d6 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 13:59:14 +0000 Subject: [PATCH 38/65] added sanity check to detect broken headers at compile time --- dietlibc-0.31-pagesize.patch | 74 +++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index 6077d15..5484678 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c --- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 19:57:13.000000000 +0200 @@ -4,16 +4,18 @@ #include #include @@ -24,7 +24,7 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c --- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 19:57:13.000000000 +0200 @@ -14,7 +14,7 @@ #ifndef WANT_LARGEFILE_BACKCOMPAT struct dirent64* readdir64(DIR *d) { @@ -54,7 +54,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/ trygetdents64=0; diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c --- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 19:57:13.000000000 +0200 @@ -5,6 +5,8 @@ #include #include @@ -75,7 +75,7 @@ diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/li lose: diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c --- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 19:57:13.000000000 +0200 @@ -5,7 +5,7 @@ struct dirent* readdir(DIR *d) { @@ -87,7 +87,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/li } diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c --- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 19:57:13.000000000 +0200 @@ -4,8 +4,10 @@ #include #include @@ -102,7 +102,7 @@ diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/l } diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c --- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 19:57:13.000000000 +0200 @@ -18,8 +18,7 @@ #include #include @@ -135,7 +135,7 @@ diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/ register size_t idx=0; diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S --- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -31,6 +31,12 @@ _start: lis 14,environ@ha stw 5,environ@l(14) @@ -151,7 +151,7 @@ diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/ bl _dyn_start diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h --- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 -+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 19:57:13.000000000 +0200 @@ -126,6 +126,16 @@ /* #define WANT_SSP_XOR */ @@ -180,7 +180,7 @@ diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/d #endif diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile --- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 19:57:13.000000000 +0200 @@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ @@ -192,7 +192,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/te diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 19:57:13.000000000 +0200 @@ -0,0 +1,80 @@ +#include +#include @@ -276,7 +276,7 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c +} diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh --- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 19:57:13.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -287,7 +287,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409 PASS="getpass" diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S --- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 stx %o2, [%o3] @@ -302,7 +302,7 @@ diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/ registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c --- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 19:57:13.000000000 +0200 @@ -3,6 +3,8 @@ #include #include @@ -342,7 +342,7 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 return ARG_MAX; diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 20:06:45.000000000 +0200 @@ -0,0 +1,25 @@ +#include +#include "../dietelfinfo.h" @@ -371,7 +371,7 @@ diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c +} diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c --- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 19:57:13.000000000 +0200 @@ -2,14 +2,25 @@ #include #include @@ -406,7 +406,7 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 - diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 19:57:13.000000000 +0200 @@ -0,0 +1,31 @@ +#ifndef H_DIETLIBC_DIETPAGESIZE_H +#define H_DIETLIBC_DIETPAGESIZE_H @@ -441,7 +441,7 @@ diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +#endif /* H_DIETLIBC_DIETPAGESIZE_H */ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S --- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -26,6 +26,11 @@ _start: larl %r13,environ stg %r4,0(%r13) @@ -456,20 +456,26 @@ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s3 brasl %r14,_dyn_start diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 18:57:47.000000000 +0200 -@@ -0,0 +1,9 @@ ++++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 20:11:55.000000000 +0200 +@@ -0,0 +1,15 @@ +#include "dietfeatures.h" + +#ifdef WANT_ELFINFO +#include +#include + ++#if defined(__powerpc64__) || defined(__x86_64__) ++struct __diet_elf_sanity_check { int f : sizeof(elf_addr_t)==8; }; ++#elif defined(__i386__) || defined(__arm__) || defined(__powerpc__) ++struct __diet_elf_sanity_check { int f : sizeof(elf_addr_t)==4; }; ++#endif ++ +elf_addr_t * __get_elf_aux_value(unsigned int tag) + __attribute__((__visibility__("hidden"),__const__)) __pure; +#endif diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S --- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -40,6 +40,11 @@ _start: ;; st8 [r14] = out2 /* store envp in environ */ @@ -484,7 +490,7 @@ diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia6 br.call.sptk.few rp = _dyn_start diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S --- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -25,6 +25,10 @@ _start: PIC_INIT /* non-PIC: this is an empty line */ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ @@ -498,7 +504,7 @@ diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i38 pushl $.text diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h --- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 19:57:13.000000000 +0200 @@ -1,8 +1,12 @@ #include @@ -515,7 +521,7 @@ diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/die +#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S --- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -24,6 +24,10 @@ _start: stq $18, environ @@ -529,7 +535,7 @@ diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/al mov $0, $19 /* mov v0(dynload) to a3 */ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S --- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 -+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 19:57:13.000000000 +0200 @@ -1,6 +1,7 @@ .section ".bss" .align 8 @@ -563,7 +569,7 @@ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.2008 +#endif diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S --- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -23,11 +23,15 @@ _start: #ifdef __DYN_LIB ldr sl, .L4 @@ -590,7 +596,7 @@ diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/ - diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S --- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -34,6 +34,11 @@ _start: ldil LP%environ, %r19 ldo RP%environ(%r19), %r19 @@ -605,7 +611,7 @@ diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/p diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h --- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 -+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 19:57:13.000000000 +0200 @@ -60,15 +60,6 @@ struct shm_info { unsigned long swap_successes; }; @@ -624,7 +630,7 @@ diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.2008040 extern int shmdt (const void *shmaddr) __THROW; diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S --- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 st %o2, [%o3] @@ -639,7 +645,7 @@ diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sp registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c --- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 19:57:13.000000000 +0200 @@ -3,17 +3,15 @@ #include #include @@ -663,7 +669,7 @@ diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sp } diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S --- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -58,6 +58,12 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) @@ -679,7 +685,7 @@ diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/pp mr 6,7 diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S --- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -12,12 +12,23 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -706,7 +712,7 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x pushq %rdi /* save reg args */ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S --- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -30,6 +30,11 @@ _start: l %r1,8(%r13) st %r4,0(%r1) @@ -721,7 +727,7 @@ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s39 basr %r14,%r1 diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S --- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 19:57:13.000000000 +0200 @@ -86,6 +86,15 @@ __environ: .long 0 #endif @@ -740,7 +746,7 @@ diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20 .long 0 diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S --- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 18:57:47.000000000 +0200 ++++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 19:57:13.000000000 +0200 @@ -47,6 +47,9 @@ __start: #endif add $a2, $a2, $a1 From 3e3d2cefd099dfa793b7c9ad61dbfa7760ba3635 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:00:32 +0000 Subject: [PATCH 39/65] more debugging... --- dietlibc.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index d65d307..b01a9da 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -140,6 +140,8 @@ done %build +echo '#include ' | gcc -E - -dD || : + make %makeflags all %{?_smp_mflags} # 'dyn' target is not SMP safe @@ -168,7 +170,7 @@ ulimit -m $[ 128*1024 ] -v $[ 256*1024 ] -d $[ 128*1024 ] readelf -a ./ftw || : objdump -d ./ftw || : -gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'q' || : +gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'p environ' -ex 'print __elfinfo' -ex 'q' || : dmesg | tail || : sleep 60 From 7346b4a3907f984607b2cb72a5888bcfb143d6dd Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:01:47 +0000 Subject: [PATCH 40/65] declares an implicitly used function --- dietlibc-0.31-implicitfunc.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 dietlibc-0.31-implicitfunc.patch diff --git a/dietlibc-0.31-implicitfunc.patch b/dietlibc-0.31-implicitfunc.patch new file mode 100644 index 0000000..4fe19f8 --- /dev/null +++ b/dietlibc-0.31-implicitfunc.patch @@ -0,0 +1,12 @@ +diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.20080409/lib/signalfd.c +--- dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc 2008-02-19 01:28:13.000000000 +0100 ++++ dietlibc-0.31.20080409/lib/signalfd.c 2008-04-13 22:30:48.000000000 +0200 +@@ -1,6 +1,8 @@ + #include + #include + ++extern int __signalfd(int fd, const sigset_t *mask, int flags); ++ + int signalfd(int fd,const sigset_t* mask,int flags) { + if (flags) { /* bizarre glibc bullshit */ + errno=EINVAL; From 8071ff7e28a5bc952d3d5e12b945655bac447ff9 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:02:36 +0000 Subject: [PATCH 41/65] define and use a custom __diet_elf_addr_t datatype instead of elf_addr_t which disappeared in linux 2.6.25 --- dietlibc-0.31-pagesize.patch | 102 ++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index 5484678..b0709b5 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c --- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 22:19:49.000000000 +0200 @@ -4,16 +4,18 @@ #include #include @@ -24,7 +24,7 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c --- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 22:19:49.000000000 +0200 @@ -14,7 +14,7 @@ #ifndef WANT_LARGEFILE_BACKCOMPAT struct dirent64* readdir64(DIR *d) { @@ -54,7 +54,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/ trygetdents64=0; diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c --- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 22:19:49.000000000 +0200 @@ -5,6 +5,8 @@ #include #include @@ -75,7 +75,7 @@ diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/li lose: diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c --- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 22:19:49.000000000 +0200 @@ -5,7 +5,7 @@ struct dirent* readdir(DIR *d) { @@ -87,7 +87,7 @@ diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/li } diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c --- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 22:19:49.000000000 +0200 @@ -4,8 +4,10 @@ #include #include @@ -102,7 +102,7 @@ diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/l } diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c --- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 22:19:49.000000000 +0200 @@ -18,8 +18,7 @@ #include #include @@ -135,7 +135,7 @@ diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/ register size_t idx=0; diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S --- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -31,6 +31,12 @@ _start: lis 14,environ@ha stw 5,environ@l(14) @@ -151,7 +151,7 @@ diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/ bl _dyn_start diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h --- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 -+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 22:19:49.000000000 +0200 @@ -126,6 +126,16 @@ /* #define WANT_SSP_XOR */ @@ -180,7 +180,7 @@ diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/d #endif diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile --- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 22:19:49.000000000 +0200 @@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ @@ -192,7 +192,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/te diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 22:19:49.000000000 +0200 @@ -0,0 +1,80 @@ +#include +#include @@ -276,7 +276,7 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c +} diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh --- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 22:19:49.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -287,7 +287,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409 PASS="getpass" diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S --- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 stx %o2, [%o3] @@ -302,12 +302,13 @@ diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/ registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c --- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 19:57:13.000000000 +0200 -@@ -3,6 +3,8 @@ ++++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 22:19:49.000000000 +0200 +@@ -3,6 +3,9 @@ #include #include +#include "dietelfinfo.h" ++#include "dietpagesize.h" + extern int __sc_nr_cpus(); @@ -318,7 +319,7 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 case _SC_CLK_TCK: +#ifdef WANT_ELFINFO + { -+ elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); ++ __diet_elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); + if (v) + return *v; + } @@ -342,15 +343,15 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 return ARG_MAX; diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 20:06:45.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 22:19:49.000000000 +0200 @@ -0,0 +1,25 @@ +#include +#include "../dietelfinfo.h" + -+elf_addr_t *__get_elf_aux_value(unsigned int tag) ++__diet_elf_addr_t *__get_elf_aux_value(unsigned int tag) +{ + extern char ** __elfinfo; -+ elf_addr_t *aux_ptr; ++ __diet_elf_addr_t *aux_ptr; + char ** tmp; + + /* External symbol points to 'environ' after startup. Now, go the end @@ -363,7 +364,7 @@ diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c + ++tmp; + __elfinfo = tmp; + -+ for (aux_ptr = (elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) ++ for (aux_ptr = (__diet_elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) + if (aux_ptr[0]==tag) + return aux_ptr+1; + @@ -371,7 +372,7 @@ diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c +} diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c --- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 22:19:49.000000000 +0200 @@ -2,14 +2,25 @@ #include #include @@ -389,7 +390,7 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 + static size_t pgsz; + + if (__unlikely(pgsz==0)) { -+ elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); ++ __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); + if (__likely(v)) + pgsz = *v; + else @@ -406,7 +407,7 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 - diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 22:19:49.000000000 +0200 @@ -0,0 +1,31 @@ +#ifndef H_DIETLIBC_DIETPAGESIZE_H +#define H_DIETLIBC_DIETPAGESIZE_H @@ -441,7 +442,7 @@ diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +#endif /* H_DIETLIBC_DIETPAGESIZE_H */ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S --- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -26,6 +26,11 @@ _start: larl %r13,environ stg %r4,0(%r13) @@ -456,26 +457,31 @@ diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s3 brasl %r14,_dyn_start diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 20:11:55.000000000 +0200 -@@ -0,0 +1,15 @@ ++++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 22:21:09.000000000 +0200 +@@ -0,0 +1,20 @@ +#include "dietfeatures.h" + +#ifdef WANT_ELFINFO -+#include -+#include ++#include ++#include ++#include + -+#if defined(__powerpc64__) || defined(__x86_64__) -+struct __diet_elf_sanity_check { int f : sizeof(elf_addr_t)==8; }; -+#elif defined(__i386__) || defined(__arm__) || defined(__powerpc__) -+struct __diet_elf_sanity_check { int f : sizeof(elf_addr_t)==4; }; -+#endif ++/* TODO: exported interface from has been changed in 2.6.25 so ++ * the 'elf_addr_t' type is not available anymore. Hence, derive it from ++ * __WORDSIZE__. */ + -+elf_addr_t * __get_elf_aux_value(unsigned int tag) ++#if __WORDSIZE == 64 ++typedef uint64_t __diet_elf_addr_t; ++#elif __WORDSIZE == 32 ++typedef uint32_t __diet_elf_addr_t; ++#endif ++ ++__diet_elf_addr_t * __get_elf_aux_value(unsigned int tag) + __attribute__((__visibility__("hidden"),__const__)) __pure; +#endif diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S --- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -40,6 +40,11 @@ _start: ;; st8 [r14] = out2 /* store envp in environ */ @@ -490,7 +496,7 @@ diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia6 br.call.sptk.few rp = _dyn_start diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S --- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -25,6 +25,10 @@ _start: PIC_INIT /* non-PIC: this is an empty line */ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ @@ -504,7 +510,7 @@ diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i38 pushl $.text diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h --- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 22:19:49.000000000 +0200 @@ -1,8 +1,12 @@ #include @@ -521,7 +527,7 @@ diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/die +#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S --- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -24,6 +24,10 @@ _start: stq $18, environ @@ -535,7 +541,7 @@ diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/al mov $0, $19 /* mov v0(dynload) to a3 */ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S --- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 -+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 22:19:49.000000000 +0200 @@ -1,6 +1,7 @@ .section ".bss" .align 8 @@ -569,7 +575,7 @@ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.2008 +#endif diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S --- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -23,11 +23,15 @@ _start: #ifdef __DYN_LIB ldr sl, .L4 @@ -596,7 +602,7 @@ diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/ - diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S --- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -34,6 +34,11 @@ _start: ldil LP%environ, %r19 ldo RP%environ(%r19), %r19 @@ -611,7 +617,7 @@ diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/p diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h --- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 -+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 22:19:49.000000000 +0200 @@ -60,15 +60,6 @@ struct shm_info { unsigned long swap_successes; }; @@ -630,7 +636,7 @@ diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.2008040 extern int shmdt (const void *shmaddr) __THROW; diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S --- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -25,6 +25,11 @@ _start: or %o3, %lo(environ), %o3 st %o2, [%o3] @@ -645,7 +651,7 @@ diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sp registered with atexit(). If we are statically linked, this will diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c --- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 22:19:49.000000000 +0200 @@ -3,17 +3,15 @@ #include #include @@ -669,7 +675,7 @@ diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sp } diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S --- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -58,6 +58,12 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) @@ -685,7 +691,7 @@ diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/pp mr 6,7 diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S --- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -12,12 +12,23 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -712,7 +718,7 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x pushq %rdi /* save reg args */ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S --- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -30,6 +30,11 @@ _start: l %r1,8(%r13) st %r4,0(%r1) @@ -727,7 +733,7 @@ diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s39 basr %r14,%r1 diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S --- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 22:19:49.000000000 +0200 @@ -86,6 +86,15 @@ __environ: .long 0 #endif @@ -746,7 +752,7 @@ diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20 .long 0 diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S --- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 19:57:13.000000000 +0200 ++++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 22:19:49.000000000 +0200 @@ -47,6 +47,9 @@ __start: #endif add $a2, $a2, $a1 From cf9cb9b1642df92a812fddf74594c54786fecafd Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:03:46 +0000 Subject: [PATCH 42/65] added a missing '#include ' --- dietlibc-0.31-printFG.patch | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch index 9a11b80..f8996d1 100644 --- a/dietlibc-0.31-printFG.patch +++ b/dietlibc-0.31-printFG.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/lib/__dtostr.c --- dietlibc-0.31.20080409/lib/__dtostr.c.printFG 2006-07-04 05:33:02.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 14:41:48.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 22:26:13.000000000 +0200 @@ -5,13 +5,15 @@ static int copystring(char* buf,int maxlen, const char* s) { @@ -51,8 +51,16 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li } else { diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/lib/__v_printf.c --- dietlibc-0.31.20080409/lib/__v_printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 14:41:48.000000000 +0200 -@@ -346,45 +346,49 @@ num_printf: ++++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 22:26:32.000000000 +0200 +@@ -4,6 +4,7 @@ + #include + #include + #include ++#include + #include "dietstdio.h" + #include "dietwarning.h" + +@@ -346,45 +347,49 @@ num_printf: #ifdef WANT_FLOATING_POINT_IN_PRINTF /* print a floating point value */ case 'f': @@ -130,7 +138,7 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ sz=strlen(s); diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/test/printf.c --- dietlibc-0.31.20080409/test/printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 14:52:36.000000000 +0200 ++++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 22:26:13.000000000 +0200 @@ -2,11 +2,24 @@ #include #include @@ -182,7 +190,7 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes diff -up dietlibc-0.31.20080409/include/stdlib.h.printFG dietlibc-0.31.20080409/include/stdlib.h --- dietlibc-0.31.20080409/include/stdlib.h.printFG 2007-09-20 20:51:18.000000000 +0200 -+++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 14:41:48.000000000 +0200 ++++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 22:26:13.000000000 +0200 @@ -28,8 +28,12 @@ long double strtold(const char *nptr, ch long int strtol(const char *nptr, char **endptr, int base) __THROW; unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; From 6ae4a9392d5aa74dfb0407c62ea9d014948b21d7 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:04:53 +0000 Subject: [PATCH 43/65] added -implicitfunc patch --- dietlibc.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index b01a9da..ff6bbc9 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -55,6 +55,7 @@ Patch44: dietlibc-0.31-printFG.patch Patch45: dietlibc-0.31-stat64.patch Patch46: dietlibc-0.31-testsuite.patch Patch47: dietlibc-0.31-lcctime.patch +Patch48: dietlibc-0.31-implicitfunc.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -109,6 +110,7 @@ This package contains the dynamic libraries for dietlibc. %patch45 -p1 -b .stat64 %patch46 -p1 -b .testsuite %patch47 -p1 -b .lcctime +%patch48 -p1 -b .implicitfunc %if %{without ssp} @@ -130,7 +132,7 @@ sed -i \ sed -i -e 's!strip !: !g' Makefile -%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 +%global fixcflags -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables %xtra_fixcflags -Os -g3 -Werror-implicit-function-declaration %global basemakeflags prefix=%pkglibdir BINDIR=%_bindir MAN1DIR=%_mandir/man1 COMMENT=: CFLAGS="$RPM_OPT_FLAGS %fixcflags $XTRA_CFLAGS" PDIET=%pkglibdir %global makeflags %basemakeflags @@ -140,8 +142,6 @@ done %build -echo '#include ' | gcc -E - -dD || : - make %makeflags all %{?_smp_mflags} # 'dyn' target is not SMP safe From f7bd5afb423e8d4c77b44098c8569e1cbc26a004 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:06:09 +0000 Subject: [PATCH 44/65] SUSv2 says about abort(3): The abort() function shall not return. Hence, add an __attribute__((__noreturn__)) --- dietlibc-0.31-noreturn.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 dietlibc-0.31-noreturn.patch diff --git a/dietlibc-0.31-noreturn.patch b/dietlibc-0.31-noreturn.patch new file mode 100644 index 0000000..6b7dc69 --- /dev/null +++ b/dietlibc-0.31-noreturn.patch @@ -0,0 +1,12 @@ +diff -up dietlibc-0.31.20080409/include/stdlib.h.noreturn dietlibc-0.31.20080409/include/stdlib.h +--- dietlibc-0.31.20080409/include/stdlib.h.noreturn 2008-04-13 22:56:59.000000000 +0200 ++++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 22:57:54.000000000 +0200 +@@ -47,7 +47,7 @@ double atof(const char *nptr) __THROW; + __extension__ long long int atoll(const char *nptr); + + void exit(int status) __THROW __attribute__((__noreturn__)); +-void abort(void) __THROW; ++void abort(void) __THROW __attribute__((__noreturn__)); + + extern int rand(void) __THROW; + extern int rand_r(unsigned int *seed) __THROW; From fab2af088b0f153f018a3a71f6e7b9a3cf45707a Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:07:30 +0000 Subject: [PATCH 45/65] fixed other issues preventing an -Werror-implicit-function-declaration build --- dietlibc-0.31-implicitfunc.patch | 33 +++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/dietlibc-0.31-implicitfunc.patch b/dietlibc-0.31-implicitfunc.patch index 4fe19f8..d9dace4 100644 --- a/dietlibc-0.31-implicitfunc.patch +++ b/dietlibc-0.31-implicitfunc.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.20080409/lib/signalfd.c --- dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/signalfd.c 2008-04-13 22:30:48.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/signalfd.c 2008-04-13 22:52:10.000000000 +0200 @@ -1,6 +1,8 @@ #include #include @@ -10,3 +10,34 @@ diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.200804 int signalfd(int fd,const sigset_t* mask,int flags) { if (flags) { /* bizarre glibc bullshit */ errno=EINVAL; +diff -up dietlibc-0.31.20080409/test/stdlib/tst-calloc.c.implicitfunc dietlibc-0.31.20080409/test/stdlib/tst-calloc.c +--- dietlibc-0.31.20080409/test/stdlib/tst-calloc.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdlib/tst-calloc.c 2008-04-13 22:52:10.000000000 +0200 +@@ -17,6 +17,8 @@ + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + ++#define _BSD_SOURCE ++ + #include + #include + #include +diff -up dietlibc-0.31.20080409/test/stdlib/testsort.c.implicitfunc dietlibc-0.31.20080409/test/stdlib/testsort.c +--- dietlibc-0.31.20080409/test/stdlib/testsort.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdlib/testsort.c 2008-04-13 22:52:10.000000000 +0200 +@@ -1,3 +1,5 @@ ++#define _BSD_SOURCE ++ + #include + #include + #include +diff -up dietlibc-0.31.20080409/test/getservbyname.c.implicitfunc dietlibc-0.31.20080409/test/getservbyname.c +--- dietlibc-0.31.20080409/test/getservbyname.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/getservbyname.c 2008-04-13 22:53:38.000000000 +0200 +@@ -1,5 +1,6 @@ + #include + #include ++#include + + int main(int argc,char *argv[]) { + struct servent* se; From 9ee39e647ef14e1c763b0f483f595be755cd260b Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:08:41 +0000 Subject: [PATCH 46/65] fixed a printf() statement --- dietlibc-0.31-pagesize.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index b0709b5..e105859 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -255,7 +255,7 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c + + if (cur!=exp) { + fprintf(stderr, "%s mismatch: got %ld, expected %ld\n", -+ cur, exp); ++ var, cur, exp); + return 1; + } + From 7e3b0fe890d5d6976d52959d196d47ed7b53c3d4 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:09:50 +0000 Subject: [PATCH 47/65] fixed a lot of borken printf(3) format specifiers --- dietlibc-0.31-testsuite.patch | 207 ++++++++++++++++++++++++++++++++-- 1 file changed, 198 insertions(+), 9 deletions(-) diff --git a/dietlibc-0.31-testsuite.patch b/dietlibc-0.31-testsuite.patch index 59ea16d..5aa54d9 100644 --- a/dietlibc-0.31-testsuite.patch +++ b/dietlibc-0.31-testsuite.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.20080409/test/getmntent.c --- dietlibc-0.31.20080409/test/getmntent.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 15:49:19.000000000 +0200 ++++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 23:16:30.000000000 +0200 @@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { printf("closing /etc/fstab\n"); @@ -13,9 +13,41 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.2008040 return 0; } - +diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.20080409/test/stdio/tst-fphex.c +--- dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-13 23:16:30.000000000 +0200 +@@ -37,7 +37,7 @@ int main (int argc, char **argv) { + int n = snprintf (buf, sizeof buf, t->fmt, t->value); + if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0) + { +- printf ("%s\tExpected \"%s\" (%u)\n\tGot \"%s\" (%d, %u)\n", ++ printf ("%s\tExpected \"%s\" (%zu)\n\tGot \"%s\" (%d, %zu)\n", + t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf)); + result = 1; + } +diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409/test/byteswap.c +--- dietlibc-0.31.20080409/test/byteswap.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-13 23:16:30.000000000 +0200 +@@ -9,12 +9,12 @@ int main() { + snprintf(buf,100,"%x %x", bswap_16(0x1234), bswap_16(0x5678)); + assert(strcmp(buf, "3412 7856") == 0); + +- printf("%lx\n",bswap_32(0x12345678)); +- snprintf(buf,100,"%lx", bswap_32(0x12345678)); ++ printf("%x\n",(unsigned int)bswap_32(0x12345678)); ++ snprintf(buf,100,"%x", (unsigned int)bswap_32(0x12345678)); + assert(strcmp(buf, "78563412") == 0); + +- printf("%qx\n",bswap_64(0x123456789ABCDEFull)); +- snprintf(buf,100,"%qx", bswap_64(0x123456789ABCDEFull)); ++ printf("%llx\n",(unsigned long long)bswap_64(0x123456789ABCDEFull)); ++ snprintf(buf,100,"%llx", (unsigned long long)bswap_64(0x123456789ABCDEFull)); + assert(strcmp(buf, "efcdab8967452301") == 0); + return 0; + } diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.20080409/test/runtests.sh ---- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 14:54:58.000000000 +0200 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 14:54:58.000000000 +0200 +--- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 23:16:30.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -24,9 +56,39 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.2008040 STDIN="read1" PASS="getpass" +diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/test/cycles.c +--- dietlibc-0.31.20080409/test/cycles.c.testsuite 2004-08-24 12:10:48.000000000 +0200 ++++ dietlibc-0.31.20080409/test/cycles.c 2008-04-13 23:16:30.000000000 +0200 +@@ -24,7 +24,7 @@ int main(int argc,char* argv[]) { + if (!fork()) { execve(argv[1],argv+1,environ); exit(1); } + wait(0); + RDTSC(b); +- printf("%llu cycles\n",b-a); ++ printf("%llu cycles\n",(unsigned long long)(b-a)); + + return 0; + } +diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409/test/sysenter.c +--- dietlibc-0.31.20080409/test/sysenter.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-13 23:16:30.000000000 +0200 +@@ -11,11 +11,11 @@ int main() { + int i; + for (i=0; environ[i]; ++i) ; + for (x=(struct elf_aux*)(environ+i+1); x->type; ++x) { +- printf("%d %x\n",x->type,x->value); ++ printf("%ld %lx\n",x->type,x->value); + if (x->type==AT_PAGESZ) +- printf("pagesize %d\n",x->value); ++ printf("pagesize %ld\n",x->value); + else if (x->type==AT_SYSINFO) +- printf("vsyscall %p\n",x->value); ++ printf("vsyscall %p\n",(void *)x->value); + } + return 0; + } diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/test/Makefile ---- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 14:54:58.000000000 +0200 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 14:54:58.000000000 +0200 +--- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 23:16:30.000000000 +0200 @@ -10,7 +10,7 @@ LCOMPAT=-lcompat TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ @@ -36,9 +98,44 @@ diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/t memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ +diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/test/bsearch.c +--- dietlibc-0.31.20080409/test/bsearch.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-13 23:16:30.000000000 +0200 +@@ -35,7 +35,7 @@ int main() { + die("bsearch returned NULL\n"); + } + if (k != array+i) die("bsearch found wrong element\n"); +- printf("%d\n",k-array); ++ printf("%ld\n",k-array); + } + } + return 0; +diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.20080409/test/printftest.c +--- dietlibc-0.31.20080409/test/printftest.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/printftest.c 2008-04-13 23:16:50.000000000 +0200 +@@ -101,8 +101,8 @@ int main() + printf("#%i#\n",18); + printf("#%d#\n",18); + printf("#%u#\n",18); +- printf("#%lu#\n",18); +- printf("#%li#\n",18); ++ printf("#%lu#\n",18l); ++ printf("#%li#\n",18l); + printf("#%-+#06d#\n", -123); + printf("#%-+#6d#\n", -123); + printf("#%+#06d#\n", -123); +@@ -142,7 +142,7 @@ int main() + buf); + memset(buf2,0,sizeof(buf)); + i=snprintf(buf2, 256, "%.9999u", 10); +- printf("%i %i\n",i,strlen(buf2)); ++ printf("%i %li\n",i,strlen(buf2)); + + printf ("snprintf (\"%%.999999u\", 10) == %d\n", + snprintf(buf2, sizeof(buf2), "%.999999u", 10)); diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-malloc.c --- dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 23:16:30.000000000 +0200 @@ -21,13 +21,15 @@ #include #include @@ -68,9 +165,51 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31 p = realloc (p, 0); if (p != NULL) +diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-strtod.c +--- dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-13 23:16:30.000000000 +0200 +@@ -149,10 +149,10 @@ main (int argc, char ** argv) + } + + const char input2[] = "+1.000000000116415321826934814453125"; +- if (strtold (input2, NULL) != +1.000000000116415321826934814453125) ++ if (strtold (input2, NULL) != +1.000000000116415321826934814453125L) + { + printf ("input2: %La != %La\n", strtold (input2, NULL), +- +1.000000000116415321826934814453125); ++ +1.000000000116415321826934814453125L); + status = 1; + } + +diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/test/rand48.c +--- dietlibc-0.31.20080409/test/rand48.c.testsuite 2002-05-29 15:20:40.000000000 +0200 ++++ dietlibc-0.31.20080409/test/rand48.c 2008-04-13 23:16:30.000000000 +0200 +@@ -6,16 +6,16 @@ main (void) + { + static unsigned short data[7] = { 1, 2, 3, 4, 5, 6, 7 }; + +- printf ("one %X\n", mrand48 ()); +- printf ("two %X\n", mrand48 ()); +- printf ("three %X\n", mrand48 ()); ++ printf ("one %lX\n", mrand48 ()); ++ printf ("two %lX\n", mrand48 ()); ++ printf ("three %lX\n", mrand48 ()); + + lcong48 (data); + printf ("after lcong48:\n"); + +- printf ("one %X\n", mrand48 ()); +- printf ("two %X\n", mrand48 ()); +- printf ("three %X\n", mrand48 ()); ++ printf ("one %lX\n", mrand48 ()); ++ printf ("two %lX\n", mrand48 ()); ++ printf ("three %lX\n", mrand48 ()); + + return 0; + } diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strftime.c --- dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 23:16:30.000000000 +0200 @@ -49,18 +49,18 @@ int main (void) { if (res == 0) @@ -95,7 +234,7 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31 } diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strptime.c --- dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 23:16:30.000000000 +0200 @@ -41,10 +41,12 @@ static const struct { "C", "03/03/00", "%D", 5, 62, 2, 3 }, { "C", "9/9/99", "%x", 4, 251, 8, 9 }, @@ -152,9 +291,43 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31 { printf ("not all of `%s' read\n", day_tests[i].input); result = 1; +diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/test/mktime.c +--- dietlibc-0.31.20080409/test/mktime.c.testsuite 2004-03-27 01:47:00.000000000 +0100 ++++ dietlibc-0.31.20080409/test/mktime.c 2008-04-13 23:16:30.000000000 +0200 +@@ -9,15 +9,15 @@ int main() { + t.tm_mday=29; + t.tm_mon=2; + t.tm_year=100; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); + t.tm_mday=1; + t.tm_mon=3; + t.tm_year=102; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); + t.tm_mday=1; + t.tm_mon=6; + t.tm_year=102; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); + return 0; + } + +diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409/test/asprintf.c +--- dietlibc-0.31.20080409/test/asprintf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-13 23:16:30.000000000 +0200 +@@ -13,7 +13,7 @@ int main(int argc, char **argv) { + assert(strlen(path) == asprintlen); + + printf("%s\n", path); +- asprintlen=asprintf(&path, "/proc" "/%d/stat", strlen(argv[1])); ++ asprintlen=asprintf(&path, "/proc" "/%zu/stat", strlen(argv[1])); + assert(strlen(path) == asprintlen); + printf("%s\n", path); + diff -up /dev/null dietlibc-0.31.20080409/test/math.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/math.c 2008-04-13 14:54:58.000000000 +0200 ++++ dietlibc-0.31.20080409/test/math.c 2008-04-13 23:16:30.000000000 +0200 @@ -0,0 +1,18 @@ +#include +#include @@ -174,3 +347,19 @@ diff -up /dev/null dietlibc-0.31.20080409/test/math.c + + return 0; +} +diff -up dietlibc-0.31.20080409/test/speed.c.testsuite dietlibc-0.31.20080409/test/speed.c +--- dietlibc-0.31.20080409/test/speed.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/speed.c 2008-04-13 23:16:30.000000000 +0200 +@@ -7,10 +7,10 @@ int main() { + int i; + time_t t; + +- printf("%d\n", time(0)); ++ printf("%ld\n", (long)time(0)); + for (i=0; i<10000000; ++i) + t=time(0); + +- printf("%d\n", time(0)); ++ printf("%ld\n", (long)time(0)); + return 0; + } From 7d0accf0f5d7213b542ac8448ef131668c618b7c Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:10:58 +0000 Subject: [PATCH 48/65] added -noreturn patch deactivated some debug code --- dietlibc.spec | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index ff6bbc9..11bba9c 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -56,6 +56,7 @@ Patch45: dietlibc-0.31-stat64.patch Patch46: dietlibc-0.31-testsuite.patch Patch47: dietlibc-0.31-lcctime.patch Patch48: dietlibc-0.31-implicitfunc.patch +Patch49: dietlibc-0.31-noreturn.patch BuildRoot: %_tmppath/%name-%version-%release-buildroot %{?with_dynamic:Requires: dietlibc-lib = %version-%release} %{!?with_dynamic:Obsoletes: dietlibc-lib < %version-%release} @@ -111,6 +112,7 @@ This package contains the dynamic libraries for dietlibc. %patch46 -p1 -b .testsuite %patch47 -p1 -b .lcctime %patch48 -p1 -b .implicitfunc +%patch49 -p1 -b .noreturn %if %{without ssp} @@ -168,14 +170,14 @@ make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) cd test ulimit -m $[ 128*1024 ] -v $[ 256*1024 ] -d $[ 128*1024 ] -readelf -a ./ftw || : -objdump -d ./ftw || : -gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'p environ' -ex 'print __elfinfo' -ex 'q' || : -dmesg | tail || : +if false; then + readelf -a ./ftw || : + objdump -d ./ftw || : + gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'p environ' -ex 'print __elfinfo' -ex 'q' || : + dmesg | tail || : +fi -sleep 60 - -bash ./runtests-X.sh +bash ./runtests-X.sh || { sleep 60 ; false; } %clean From 128218d5b462322145beb0434f79f06dc6847d3e Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:12:09 +0000 Subject: [PATCH 49/65] use a better definition for INFINITY whitespace cleanup --- dietlibc-0.31-printFG.patch | 78 ++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch index f8996d1..5e9736d 100644 --- a/dietlibc-0.31-printFG.patch +++ b/dietlibc-0.31-printFG.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/lib/__dtostr.c --- dietlibc-0.31.20080409/lib/__dtostr.c.printFG 2006-07-04 05:33:02.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 22:26:13.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 23:34:48.000000000 +0200 @@ -5,13 +5,15 @@ static int copystring(char* buf,int maxlen, const char* s) { @@ -51,7 +51,7 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li } else { diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/lib/__v_printf.c --- dietlibc-0.31.20080409/lib/__v_printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 22:26:32.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 23:34:48.000000000 +0200 @@ -4,6 +4,7 @@ #include #include @@ -138,8 +138,8 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ sz=strlen(s); diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/test/printf.c --- dietlibc-0.31.20080409/test/printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 22:26:13.000000000 +0200 -@@ -2,11 +2,24 @@ ++++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 23:36:42.000000000 +0200 +@@ -2,11 +2,26 @@ #include #include #include @@ -151,7 +151,9 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes #define ALGN 5 +#ifndef INFINITY -+# define INFINITY (DBL_MAX * DBL_MAX) ++# if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) ++# define INFINITY (__builtin_inf()) ++# endif +#endif + +#ifndef NAN @@ -164,33 +166,63 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes // https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112986 #if 0 #undef assert -@@ -131,6 +144,23 @@ int main() +@@ -60,7 +75,7 @@ + TEST_SNPRINTF(EXP, 0, __VA_ARGS__); \ + TEST_SNPRINTF(EXP, sizeof(EXP)+ALGN, __VA_ARGS__); \ + TEST_SNPRINTF_NULL(EXP, __VA_ARGS__) +- ++ + + int main() + { +@@ -101,7 +116,7 @@ int main() + TEST("42.23", "%5.2f", 42.23); + TEST("42.23", "%5.4g", 42.23); + TEST(" 42.2", "%5.3g", 42.23); +- ++ + TEST(" 1", "%*i", 4, 1); + TEST(" 1", "%4i", 1); + TEST("1 ", "%-4i", 1); +@@ -131,13 +146,32 @@ int main() TEST("-01234", "%6.5i", -1234); TEST(" 1234", "%6.5s", "1234"); -+ TEST("inf", "%f", INFINITY); -+ TEST("-inf", "%f", -INFINITY); -+ TEST("INF", "%F", INFINITY); -+ TEST("-INF", "%F", -INFINITY); ++#ifdef INFINITY ++ TEST("inf", "%f", INFINITY); ++ TEST("-inf", "%f", -INFINITY); ++ TEST("INF", "%F", INFINITY); ++ TEST("-INF", "%F", -INFINITY); + -+ TEST("inf", "%g", INFINITY); -+ TEST("-inf", "%g", -INFINITY); -+ TEST("INF", "%G", INFINITY); -+ TEST("-INF", "%G", -INFINITY); -+ -+#ifdef NAN -+ TEST("nan", "%f", NAN); -+ TEST("NAN", "%F", NAN); -+ TEST("nan", "%g", NAN); -+ TEST("NAN", "%G", NAN); ++ TEST("inf", "%g", INFINITY); ++ TEST("-inf", "%g", -INFINITY); ++ TEST("INF", "%G", INFINITY); ++ TEST("-INF", "%G", -INFINITY); +#endif -+ ++ ++#ifdef NAN ++ TEST("nan", "%f", NAN); ++ TEST("NAN", "%F", NAN); ++ TEST("nan", "%g", NAN); ++ TEST("NAN", "%G", NAN); ++#endif ++ #ifdef XSI_TESTS setlocale(LC_ALL, "de_DE"); - +- ++ + TEST("1.234", "%'u", 1234); + TEST("2 1", "%2$u %1$u", 1, 2); + #endif +- +- ++ ++ + return EXIT_SUCCESS; + } diff -up dietlibc-0.31.20080409/include/stdlib.h.printFG dietlibc-0.31.20080409/include/stdlib.h --- dietlibc-0.31.20080409/include/stdlib.h.printFG 2007-09-20 20:51:18.000000000 +0200 -+++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 22:26:13.000000000 +0200 ++++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 23:34:48.000000000 +0200 @@ -28,8 +28,12 @@ long double strtold(const char *nptr, ch long int strtol(const char *nptr, char **endptr, int base) __THROW; unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; From d0229df7c23ed61dcb42faa7aa75a651f4670015 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:13:18 +0000 Subject: [PATCH 50/65] disabled -inf testcases for now --- dietlibc-0.31-printFG.patch | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch index 5e9736d..b480128 100644 --- a/dietlibc-0.31-printFG.patch +++ b/dietlibc-0.31-printFG.patch @@ -190,14 +190,14 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes +#ifdef INFINITY + TEST("inf", "%f", INFINITY); -+ TEST("-inf", "%f", -INFINITY); ++ //TEST("-inf", "%f", -INFINITY); + TEST("INF", "%F", INFINITY); -+ TEST("-INF", "%F", -INFINITY); ++ //TEST("-INF", "%F", -INFINITY); + + TEST("inf", "%g", INFINITY); -+ TEST("-inf", "%g", -INFINITY); ++ //TEST("-inf", "%g", -INFINITY); + TEST("INF", "%G", INFINITY); -+ TEST("-INF", "%G", -INFINITY); ++ //TEST("-INF", "%G", -INFINITY); +#endif + +#ifdef NAN From fe2cbf2d52154a067aacca391e8179cb01ca8b1d Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:14:27 +0000 Subject: [PATCH 51/65] added other INFINITY testcases --- dietlibc-0.31-testsuite.patch | 46 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/dietlibc-0.31-testsuite.patch b/dietlibc-0.31-testsuite.patch index 5aa54d9..18783e0 100644 --- a/dietlibc-0.31-testsuite.patch +++ b/dietlibc-0.31-testsuite.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.20080409/test/getmntent.c --- dietlibc-0.31.20080409/test/getmntent.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 23:51:41.000000000 +0200 @@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { printf("closing /etc/fstab\n"); @@ -15,7 +15,7 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.2008040 - diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.20080409/test/stdio/tst-fphex.c --- dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-13 23:51:41.000000000 +0200 @@ -37,7 +37,7 @@ int main (int argc, char **argv) { int n = snprintf (buf, sizeof buf, t->fmt, t->value); if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0) @@ -27,7 +27,7 @@ diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.2 } diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409/test/byteswap.c --- dietlibc-0.31.20080409/test/byteswap.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-13 23:51:41.000000000 +0200 @@ -9,12 +9,12 @@ int main() { snprintf(buf,100,"%x %x", bswap_16(0x1234), bswap_16(0x5678)); assert(strcmp(buf, "3412 7856") == 0); @@ -46,8 +46,8 @@ diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409 return 0; } diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.20080409/test/runtests.sh ---- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 23:16:30.000000000 +0200 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 23:16:30.000000000 +0200 +--- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 23:51:41.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -58,7 +58,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.2008040 PASS="getpass" diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/test/cycles.c --- dietlibc-0.31.20080409/test/cycles.c.testsuite 2004-08-24 12:10:48.000000000 +0200 -+++ dietlibc-0.31.20080409/test/cycles.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/cycles.c 2008-04-13 23:51:41.000000000 +0200 @@ -24,7 +24,7 @@ int main(int argc,char* argv[]) { if (!fork()) { execve(argv[1],argv+1,environ); exit(1); } wait(0); @@ -70,7 +70,7 @@ diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/t } diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409/test/sysenter.c --- dietlibc-0.31.20080409/test/sysenter.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-13 23:51:41.000000000 +0200 @@ -11,11 +11,11 @@ int main() { int i; for (i=0; environ[i]; ++i) ; @@ -87,8 +87,8 @@ diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409 return 0; } diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/test/Makefile ---- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 23:16:30.000000000 +0200 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 23:16:30.000000000 +0200 +--- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 23:51:41.000000000 +0200 @@ -10,7 +10,7 @@ LCOMPAT=-lcompat TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ @@ -100,7 +100,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/t speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/test/bsearch.c --- dietlibc-0.31.20080409/test/bsearch.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-13 23:51:41.000000000 +0200 @@ -35,7 +35,7 @@ int main() { die("bsearch returned NULL\n"); } @@ -112,7 +112,7 @@ diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/ return 0; diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.20080409/test/printftest.c --- dietlibc-0.31.20080409/test/printftest.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printftest.c 2008-04-13 23:16:50.000000000 +0200 ++++ dietlibc-0.31.20080409/test/printftest.c 2008-04-13 23:51:41.000000000 +0200 @@ -101,8 +101,8 @@ int main() printf("#%i#\n",18); printf("#%d#\n",18); @@ -135,7 +135,7 @@ diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.200804 snprintf(buf2, sizeof(buf2), "%.999999u", 10)); diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-malloc.c --- dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 23:51:41.000000000 +0200 @@ -21,13 +21,15 @@ #include #include @@ -167,7 +167,7 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31 if (p != NULL) diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-strtod.c --- dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-13 23:51:41.000000000 +0200 @@ -149,10 +149,10 @@ main (int argc, char ** argv) } @@ -183,7 +183,7 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31 diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/test/rand48.c --- dietlibc-0.31.20080409/test/rand48.c.testsuite 2002-05-29 15:20:40.000000000 +0200 -+++ dietlibc-0.31.20080409/test/rand48.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/rand48.c 2008-04-13 23:51:41.000000000 +0200 @@ -6,16 +6,16 @@ main (void) { static unsigned short data[7] = { 1, 2, 3, 4, 5, 6, 7 }; @@ -209,7 +209,7 @@ diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/t } diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strftime.c --- dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 23:51:41.000000000 +0200 @@ -49,18 +49,18 @@ int main (void) { if (res == 0) @@ -234,7 +234,7 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31 } diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strptime.c --- dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 23:51:41.000000000 +0200 @@ -41,10 +41,12 @@ static const struct { "C", "03/03/00", "%D", 5, 62, 2, 3 }, { "C", "9/9/99", "%x", 4, 251, 8, 9 }, @@ -293,7 +293,7 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31 result = 1; diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/test/mktime.c --- dietlibc-0.31.20080409/test/mktime.c.testsuite 2004-03-27 01:47:00.000000000 +0100 -+++ dietlibc-0.31.20080409/test/mktime.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/mktime.c 2008-04-13 23:51:41.000000000 +0200 @@ -9,15 +9,15 @@ int main() { t.tm_mday=29; t.tm_mon=2; @@ -315,7 +315,7 @@ diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/t diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409/test/asprintf.c --- dietlibc-0.31.20080409/test/asprintf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-13 23:51:41.000000000 +0200 @@ -13,7 +13,7 @@ int main(int argc, char **argv) { assert(strlen(path) == asprintlen); @@ -327,8 +327,8 @@ diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409 diff -up /dev/null dietlibc-0.31.20080409/test/math.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/math.c 2008-04-13 23:16:30.000000000 +0200 -@@ -0,0 +1,18 @@ ++++ dietlibc-0.31.20080409/test/math.c 2008-04-13 23:51:57.000000000 +0200 +@@ -0,0 +1,22 @@ +#include +#include +#include @@ -338,6 +338,10 @@ diff -up /dev/null dietlibc-0.31.20080409/test/math.c +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) + assert(isinf(__builtin_inff())==1); + assert(isinf(-__builtin_inff())==-1); ++ ++ assert(isinf(__builtin_inf())==1); ++ assert(isinf(-__builtin_inf())==-1); ++ + assert(isnan(__builtin_nan(""))); +#endif + @@ -349,7 +353,7 @@ diff -up /dev/null dietlibc-0.31.20080409/test/math.c +} diff -up dietlibc-0.31.20080409/test/speed.c.testsuite dietlibc-0.31.20080409/test/speed.c --- dietlibc-0.31.20080409/test/speed.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/speed.c 2008-04-13 23:16:30.000000000 +0200 ++++ dietlibc-0.31.20080409/test/speed.c 2008-04-13 23:51:41.000000000 +0200 @@ -7,10 +7,10 @@ int main() { int i; time_t t; From 8423064d00998668e1048393a873439bd5e25607 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:15:50 +0000 Subject: [PATCH 52/65] - do not test for signess of isinf(3); C99 guarantees values of 0 and not 0 and does not differ between positive and negative inf. 'isinf(3)' is a builtin in gcc 4.3 and previous check won't work anymore. Instead of, test whether value is lesser or greater than zero. - renabled the INF testsuite --- dietlibc-0.31-printFG.patch | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch index b480128..5da6b17 100644 --- a/dietlibc-0.31-printFG.patch +++ b/dietlibc-0.31-printFG.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/lib/__dtostr.c --- dietlibc-0.31.20080409/lib/__dtostr.c.printFG 2006-07-04 05:33:02.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-13 23:34:48.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-14 00:36:10.000000000 +0200 @@ -5,13 +5,15 @@ static int copystring(char* buf,int maxlen, const char* s) { @@ -20,27 +20,22 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li #if 1 union { unsigned long long l; -@@ -31,12 +33,17 @@ int __dtostr(double d,char *buf,unsigned - signed long e10; - /* step 3: calculate 10^e10 */ - unsigned int i; -+ int is_inf; - double backup=d; +@@ -35,8 +37,12 @@ int __dtostr(double d,char *buf,unsigned double tmp; char *oldbuf=buf; - if ((i=isinf(d))) return copystring(buf,maxlen,i>0?"inf":"-inf"); - if (isnan(d)) return copystring(buf,maxlen,"nan"); -+ if ((is_inf=isinf(d))) ++ if (isinf(d)) + return copystring(buf,maxlen, -+ (is_inf<0)? ++ (d<0)? + (flags&0x02?"-INF":"-inf"): + (flags&0x02?"INF":"inf")); + if (isnan(d)) return copystring(buf,maxlen,flags&0x02?"NAN":"nan"); e10=1+(long)(e*0.30102999566398119802); /* log10(2) */ /* Wir iterieren von Links bis wir bei 0 sind oder maxlen erreicht * ist. Wenn maxlen erreicht ist, machen wir das nochmal in -@@ -126,7 +133,7 @@ int __dtostr(double d,char *buf,unsigned +@@ -126,7 +132,7 @@ int __dtostr(double d,char *buf,unsigned if (prec2 || prec>(unsigned int)(buf-oldbuf)+1) { /* more digits wanted */ if (!maxlen) return 0; --maxlen; *buf='.'; ++buf; @@ -51,7 +46,7 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li } else { diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/lib/__v_printf.c --- dietlibc-0.31.20080409/lib/__v_printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-13 23:34:48.000000000 +0200 ++++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-14 00:36:10.000000000 +0200 @@ -4,6 +4,7 @@ #include #include @@ -138,7 +133,7 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ sz=strlen(s); diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/test/printf.c --- dietlibc-0.31.20080409/test/printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printf.c 2008-04-13 23:36:42.000000000 +0200 ++++ dietlibc-0.31.20080409/test/printf.c 2008-04-14 00:36:10.000000000 +0200 @@ -2,11 +2,26 @@ #include #include @@ -190,14 +185,14 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes +#ifdef INFINITY + TEST("inf", "%f", INFINITY); -+ //TEST("-inf", "%f", -INFINITY); ++ TEST("-inf", "%f", -INFINITY); + TEST("INF", "%F", INFINITY); -+ //TEST("-INF", "%F", -INFINITY); ++ TEST("-INF", "%F", -INFINITY); + + TEST("inf", "%g", INFINITY); -+ //TEST("-inf", "%g", -INFINITY); ++ TEST("-inf", "%g", -INFINITY); + TEST("INF", "%G", INFINITY); -+ //TEST("-INF", "%G", -INFINITY); ++ TEST("-INF", "%G", -INFINITY); +#endif + +#ifdef NAN @@ -222,7 +217,7 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes } diff -up dietlibc-0.31.20080409/include/stdlib.h.printFG dietlibc-0.31.20080409/include/stdlib.h --- dietlibc-0.31.20080409/include/stdlib.h.printFG 2007-09-20 20:51:18.000000000 +0200 -+++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 23:34:48.000000000 +0200 ++++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-14 00:36:10.000000000 +0200 @@ -28,8 +28,12 @@ long double strtold(const char *nptr, ch long int strtol(const char *nptr, char **endptr, int base) __THROW; unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; From c033735eeaa45bebc08fc92f17d3f9084cfa7750 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:17:00 +0000 Subject: [PATCH 53/65] - fixed tests using isinf(); the math.c test checks the dietlibc implementation of isinf() (which differs between positive and negative inf). All other tests use boolean retval only and test for the signess of the values --- dietlibc-0.31-testsuite.patch | 87 +++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/dietlibc-0.31-testsuite.patch b/dietlibc-0.31-testsuite.patch index 18783e0..bd5f24d 100644 --- a/dietlibc-0.31-testsuite.patch +++ b/dietlibc-0.31-testsuite.patch @@ -1,6 +1,6 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.20080409/test/getmntent.c --- dietlibc-0.31.20080409/test/getmntent.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-14 00:41:17.000000000 +0200 @@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { printf("closing /etc/fstab\n"); @@ -15,7 +15,7 @@ diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.2008040 - diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.20080409/test/stdio/tst-fphex.c --- dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-14 00:41:17.000000000 +0200 @@ -37,7 +37,7 @@ int main (int argc, char **argv) { int n = snprintf (buf, sizeof buf, t->fmt, t->value); if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0) @@ -25,9 +25,29 @@ diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.2 t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf)); result = 1; } +diff -up dietlibc-0.31.20080409/test/stdio/tstscanf.c.testsuite dietlibc-0.31.20080409/test/stdio/tstscanf.c +--- dietlibc-0.31.20080409/test/stdio/tstscanf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 ++++ dietlibc-0.31.20080409/test/stdio/tstscanf.c 2008-04-14 00:47:36.000000000 +0200 +@@ -338,14 +338,14 @@ main (int argc, char **argv) + int res; + + res = sscanf ("-InF", "%f", &value); +- if (res != 1 || isinf (value) != -1) ++ if (res != 1 || !isinf (value) || !(value<0)) + { + fputs ("test failed!\n", stdout); + result = 1; + } + + res = sscanf ("+InfiNiTY", "%f", &value); +- if (res != 1 || isinf (value) != 1) ++ if (res != 1 || !isinf (value) || !(value>0)) + { + fputs ("test failed!\n", stdout); + result = 1; diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409/test/byteswap.c --- dietlibc-0.31.20080409/test/byteswap.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-14 00:41:17.000000000 +0200 @@ -9,12 +9,12 @@ int main() { snprintf(buf,100,"%x %x", bswap_16(0x1234), bswap_16(0x5678)); assert(strcmp(buf, "3412 7856") == 0); @@ -46,8 +66,8 @@ diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409 return 0; } diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.20080409/test/runtests.sh ---- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-13 23:51:41.000000000 +0200 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 23:51:41.000000000 +0200 +--- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-14 00:41:17.000000000 +0200 ++++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-14 00:41:17.000000000 +0200 @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -58,7 +78,7 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.2008040 PASS="getpass" diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/test/cycles.c --- dietlibc-0.31.20080409/test/cycles.c.testsuite 2004-08-24 12:10:48.000000000 +0200 -+++ dietlibc-0.31.20080409/test/cycles.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/cycles.c 2008-04-14 00:41:17.000000000 +0200 @@ -24,7 +24,7 @@ int main(int argc,char* argv[]) { if (!fork()) { execve(argv[1],argv+1,environ); exit(1); } wait(0); @@ -70,7 +90,7 @@ diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/t } diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409/test/sysenter.c --- dietlibc-0.31.20080409/test/sysenter.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-14 00:41:17.000000000 +0200 @@ -11,11 +11,11 @@ int main() { int i; for (i=0; environ[i]; ++i) ; @@ -87,8 +107,8 @@ diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409 return 0; } diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/test/Makefile ---- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-13 23:51:41.000000000 +0200 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 23:51:41.000000000 +0200 +--- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-14 00:41:17.000000000 +0200 ++++ dietlibc-0.31.20080409/test/Makefile 2008-04-14 00:41:17.000000000 +0200 @@ -10,7 +10,7 @@ LCOMPAT=-lcompat TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ @@ -100,7 +120,7 @@ diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/t speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/test/bsearch.c --- dietlibc-0.31.20080409/test/bsearch.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-14 00:41:17.000000000 +0200 @@ -35,7 +35,7 @@ int main() { die("bsearch returned NULL\n"); } @@ -112,7 +132,7 @@ diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/ return 0; diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.20080409/test/printftest.c --- dietlibc-0.31.20080409/test/printftest.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printftest.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/printftest.c 2008-04-14 00:41:17.000000000 +0200 @@ -101,8 +101,8 @@ int main() printf("#%i#\n",18); printf("#%d#\n",18); @@ -135,7 +155,7 @@ diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.200804 snprintf(buf2, sizeof(buf2), "%.999999u", 10)); diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-malloc.c --- dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-14 00:41:17.000000000 +0200 @@ -21,13 +21,15 @@ #include #include @@ -167,7 +187,7 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31 if (p != NULL) diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-strtod.c --- dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-14 00:41:17.000000000 +0200 @@ -149,10 +149,10 @@ main (int argc, char ** argv) } @@ -183,7 +203,7 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31 diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/test/rand48.c --- dietlibc-0.31.20080409/test/rand48.c.testsuite 2002-05-29 15:20:40.000000000 +0200 -+++ dietlibc-0.31.20080409/test/rand48.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/rand48.c 2008-04-14 00:41:17.000000000 +0200 @@ -6,16 +6,16 @@ main (void) { static unsigned short data[7] = { 1, 2, 3, 4, 5, 6, 7 }; @@ -209,7 +229,7 @@ diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/t } diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strftime.c --- dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-14 00:41:17.000000000 +0200 @@ -49,18 +49,18 @@ int main (void) { if (res == 0) @@ -234,7 +254,7 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31 } diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strptime.c --- dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-14 00:41:17.000000000 +0200 @@ -41,10 +41,12 @@ static const struct { "C", "03/03/00", "%D", 5, 62, 2, 3 }, { "C", "9/9/99", "%x", 4, 251, 8, 9 }, @@ -293,7 +313,7 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31 result = 1; diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/test/mktime.c --- dietlibc-0.31.20080409/test/mktime.c.testsuite 2004-03-27 01:47:00.000000000 +0100 -+++ dietlibc-0.31.20080409/test/mktime.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/mktime.c 2008-04-14 00:41:17.000000000 +0200 @@ -9,15 +9,15 @@ int main() { t.tm_mday=29; t.tm_mon=2; @@ -315,7 +335,7 @@ diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/t diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409/test/asprintf.c --- dietlibc-0.31.20080409/test/asprintf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-14 00:41:17.000000000 +0200 @@ -13,7 +13,7 @@ int main(int argc, char **argv) { assert(strlen(path) == asprintlen); @@ -327,33 +347,40 @@ diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409 diff -up /dev/null dietlibc-0.31.20080409/test/math.c --- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/math.c 2008-04-13 23:51:57.000000000 +0200 -@@ -0,0 +1,22 @@ ++++ dietlibc-0.31.20080409/test/math.c 2008-04-14 00:46:45.000000000 +0200 +@@ -0,0 +1,29 @@ +#include +#include +#include + +int main() +{ ++ extern int __isinf(double d); ++ extern int __isnan(double d); ++ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) -+ assert(isinf(__builtin_inff())==1); -+ assert(isinf(-__builtin_inff())==-1); ++ assert(__isinf(__builtin_inff()) == +1); ++ assert(__isinf(-__builtin_inff()) == -1); + -+ assert(isinf(__builtin_inf())==1); -+ assert(isinf(-__builtin_inf())==-1); ++ assert(__isinf(__builtin_inf()) == +1); ++ assert(__isinf(-__builtin_inf()) == -1); + -+ assert(isnan(__builtin_nan(""))); ++ assert(__isnan(__builtin_nan(""))); +#endif + -+ assert(isinf((DBL_MAX * DBL_MAX))==1); -+ assert(isinf(-(DBL_MAX * DBL_MAX))==-1); -+ //assert(isnan(nan(""))); ++ assert(__isinf((DBL_MAX * DBL_MAX)) == +1); ++ assert(__isinf(-(DBL_MAX * DBL_MAX)) == -1); + -+ return 0; ++ assert(isinf((DBL_MAX * DBL_MAX))); ++ assert(isinf(-(DBL_MAX * DBL_MAX))); ++ ++ //assert(isnan(nan(""))); ++ ++ return 0; +} diff -up dietlibc-0.31.20080409/test/speed.c.testsuite dietlibc-0.31.20080409/test/speed.c --- dietlibc-0.31.20080409/test/speed.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/speed.c 2008-04-13 23:51:41.000000000 +0200 ++++ dietlibc-0.31.20080409/test/speed.c 2008-04-14 00:41:17.000000000 +0200 @@ -7,10 +7,10 @@ int main() { int i; time_t t; From 889b46347638e834c3289c2f94d1fc21ce7cbfaf Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:18:24 +0000 Subject: [PATCH 54/65] - removed debug stuff from specfile - updated patches to work with new isinf() behavior of gcc 4.3 --- dietlibc.spec | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 11bba9c..0cca379 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -30,7 +30,7 @@ Summary: Small libc implementation Name: dietlibc Version: 0.31 -Release: %release_func 2%{?snapshot:.%snapshot} +Release: %release_func 3%{?snapshot:.%snapshot} License: GPL Group: Development/Libraries URL: http://www.fefe.de/dietlibc/ @@ -170,14 +170,7 @@ make %makeflags -C test/inet all %{?_smp_mflags} DIET=$(echo `pwd`/bin-*/diet) cd test ulimit -m $[ 128*1024 ] -v $[ 256*1024 ] -d $[ 128*1024 ] -if false; then - readelf -a ./ftw || : - objdump -d ./ftw || : - gdb ./ftw -ex 'r' -ex 'bt' -ex 'info registers' -ex 'info locals' -ex 'p environ' -ex 'print __elfinfo' -ex 'q' || : - dmesg | tail || : -fi - -bash ./runtests-X.sh || { sleep 60 ; false; } +bash ./runtests-X.sh %clean @@ -208,6 +201,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Apr 14 2008 Enrico Scholz - 0.31-3.20080409 +- removed debug stuff from specfile +- updated patches to work with new isinf() behavior of gcc 4.3 + * Sun Apr 13 2008 Enrico Scholz - 0.31-2.20080409 - added patch for dynamic PAGE_SIZE support - fixed/enhanced testsuite and removed the '|| :' in %%check From d8eec0874878f2371d1204d3de79d9248454367e Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:19:34 +0000 Subject: [PATCH 55/65] moved calculation of __elfinto into start.S; user could do e.g. '*environ = NULL' which breaks the current deferred calculation in __libc_getpagesize() do not return a predefined PAGE_SIZE when __elfinfo code fails --- dietlibc-0.31-pagesize.patch | 294 ++++++++++++++++++----------------- 1 file changed, 154 insertions(+), 140 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index e105859..7a9f71e 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,6 +1,5 @@ -diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib/mmap64.c ---- dietlibc-0.31.20080409/lib/mmap64.c.pagesize 2004-12-13 11:21:31.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/mmap64.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/mmap64.c.pagesize ++++ dietlibc-0.31.20080409/lib/mmap64.c @@ -4,16 +4,18 @@ #include #include @@ -22,9 +21,8 @@ diff -up dietlibc-0.31.20080409/lib/mmap64.c.pagesize dietlibc-0.31.20080409/lib } void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) -diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/lib/readdir64.c ---- dietlibc-0.31.20080409/lib/readdir64.c.pagesize 2004-03-02 22:27:19.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/readdir64.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/readdir64.c.pagesize ++++ dietlibc-0.31.20080409/lib/readdir64.c @@ -14,7 +14,7 @@ #ifndef WANT_LARGEFILE_BACKCOMPAT struct dirent64* readdir64(DIR *d) { @@ -52,9 +50,8 @@ diff -up dietlibc-0.31.20080409/lib/readdir64.c.pagesize dietlibc-0.31.20080409/ if (res<=0) { if (errno==ENOSYS) { trygetdents64=0; -diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/lib/opendir.c ---- dietlibc-0.31.20080409/lib/opendir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/opendir.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/opendir.c.pagesize ++++ dietlibc-0.31.20080409/lib/opendir.c @@ -5,6 +5,8 @@ #include #include @@ -73,9 +70,8 @@ diff -up dietlibc-0.31.20080409/lib/opendir.c.pagesize dietlibc-0.31.20080409/li MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (t == MAP_FAILED) lose: -diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/lib/readdir.c ---- dietlibc-0.31.20080409/lib/readdir.c.pagesize 2002-07-03 22:33:38.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/readdir.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/readdir.c.pagesize ++++ dietlibc-0.31.20080409/lib/readdir.c @@ -5,7 +5,7 @@ struct dirent* readdir(DIR *d) { @@ -85,9 +81,8 @@ diff -up dietlibc-0.31.20080409/lib/readdir.c.pagesize dietlibc-0.31.20080409/li if (res<=0) return 0; d->num=res; d->cur=0; } -diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/lib/closedir.c ---- dietlibc-0.31.20080409/lib/closedir.c.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/closedir.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/closedir.c.pagesize ++++ dietlibc-0.31.20080409/lib/closedir.c @@ -4,8 +4,10 @@ #include #include @@ -100,9 +95,8 @@ diff -up dietlibc-0.31.20080409/lib/closedir.c.pagesize dietlibc-0.31.20080409/l + munmap (d, __DIET_PAGE_SIZE); return res; } -diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/alloc.c ---- dietlibc-0.31.20080409/lib/alloc.c.pagesize 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/alloc.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/lib/alloc.c.pagesize ++++ dietlibc-0.31.20080409/lib/alloc.c @@ -18,8 +18,7 @@ #include #include @@ -133,25 +127,25 @@ diff -up dietlibc-0.31.20080409/lib/alloc.c.pagesize dietlibc-0.31.20080409/lib/ static size_t REGPARM(1) get_index(size_t _size) { register size_t idx=0; -diff -up dietlibc-0.31.20080409/ppc/start.S.pagesize dietlibc-0.31.20080409/ppc/start.S ---- dietlibc-0.31.20080409/ppc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -31,6 +31,12 @@ _start: +--- dietlibc-0.31.20080409/ppc/start.S.pagesize ++++ dietlibc-0.31.20080409/ppc/start.S +@@ -31,6 +31,14 @@ _start: lis 14,environ@ha stw 5,environ@l(14) +#ifdef WANT_ELFINFO -+ /* TODO: can we really assume that environ and __elfinfo are on the -+ same 16 bit page? */ ++1: lwzu 15,4(5) ++ cmpwi 15,0 ++ bne 1b ++ + stw 5,__elfinfo@l(14) +#endif + #ifdef WANT_DYNAMIC mr 6,7 bl _dyn_start -diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/dietfeatures.h ---- dietlibc-0.31.20080409/dietfeatures.h.pagesize 2007-10-09 01:15:27.000000000 +0200 -+++ dietlibc-0.31.20080409/dietfeatures.h 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/dietfeatures.h.pagesize ++++ dietlibc-0.31.20080409/dietfeatures.h @@ -126,6 +126,16 @@ /* #define WANT_SSP_XOR */ @@ -178,9 +172,8 @@ diff -up dietlibc-0.31.20080409/dietfeatures.h.pagesize dietlibc-0.31.20080409/d +#endif + #endif -diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/test/Makefile ---- dietlibc-0.31.20080409/test/Makefile.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/test/Makefile.pagesize ++++ dietlibc-0.31.20080409/test/Makefile @@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ @@ -190,9 +183,8 @@ diff -up dietlibc-0.31.20080409/test/Makefile.pagesize dietlibc-0.31.20080409/te test: $(TESTPROGRAMS) -diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c ---- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/sysconf.c 2008-04-13 22:19:49.000000000 +0200 +--- /dev/null ++++ dietlibc-0.31.20080409/test/sysconf.c @@ -0,0 +1,80 @@ +#include +#include @@ -274,9 +266,8 @@ diff -up /dev/null dietlibc-0.31.20080409/test/sysconf.c + + return err; +} -diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409/test/runtests.sh ---- dietlibc-0.31.20080409/test/runtests.sh.pagesize 2008-02-23 01:02:19.000000000 +0100 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/test/runtests.sh.pagesize ++++ dietlibc-0.31.20080409/test/runtests.sh @@ -1,6 +1,6 @@ SUBDIRS="dirent inet stdio string stdlib time" @@ -285,14 +276,19 @@ diff -up dietlibc-0.31.20080409/test/runtests.sh.pagesize dietlibc-0.31.20080409 STDIN="read1" PASS="getpass" -diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/sparc64/start.S ---- dietlibc-0.31.20080409/sparc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc64/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -25,6 +25,11 @@ _start: +--- dietlibc-0.31.20080409/sparc64/start.S.pagesize ++++ dietlibc-0.31.20080409/sparc64/start.S +@@ -25,6 +25,17 @@ _start: or %o3, %lo(environ), %o3 stx %o2, [%o3] +#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: add %o2, %o2, 8 ++ ldx [%o2-8], %o4 ++ orcc %o4, %o4, %o4 ++ bne 1b ++ + add %o3, %o3, 8 + stx %o2, [%o3] +#endif @@ -300,9 +296,8 @@ diff -up dietlibc-0.31.20080409/sparc64/start.S.pagesize dietlibc-0.31.20080409/ /* When starting a binary via the dynamic linker, %g1 contains the address of the shared library termination function, which will be registered with atexit(). If we are statically linked, this will -diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.20080409/libcruft/sysconf.c ---- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize 2002-12-20 14:32:37.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/sysconf.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize ++++ dietlibc-0.31.20080409/libcruft/sysconf.c @@ -3,6 +3,9 @@ #include #include @@ -313,7 +308,7 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 extern int __sc_nr_cpus(); long sysconf(int name) -@@ -16,6 +18,14 @@ long sysconf(int name) +@@ -16,6 +19,14 @@ long sysconf(int name) return limit.rlim_cur; } case _SC_CLK_TCK: @@ -328,7 +323,7 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 #ifdef __alpha__ return 1024; #else -@@ -23,11 +33,7 @@ long sysconf(int name) +@@ -23,11 +34,7 @@ long sysconf(int name) #endif case _SC_PAGESIZE: @@ -341,39 +336,26 @@ diff -up dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize dietlibc-0.31.200804 case _SC_ARG_MAX: return ARG_MAX; -diff -up /dev/null dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c ---- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c 2008-04-13 22:19:49.000000000 +0200 -@@ -0,0 +1,25 @@ +--- /dev/null ++++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c +@@ -0,0 +1,14 @@ +#include +#include "../dietelfinfo.h" + +__diet_elf_addr_t *__get_elf_aux_value(unsigned int tag) +{ -+ extern char ** __elfinfo; -+ __diet_elf_addr_t *aux_ptr; -+ char ** tmp; ++ extern __diet_elf_addr_t const * const __elfinfo; ++ __diet_elf_addr_t *aux_ptr; + -+ /* External symbol points to 'environ' after startup. Now, go the end -+ * of 'environ'; the auxiliary ELF table is located immediately after -+ * this position */ -+ -+ /* operate on tmp instead of __elfinfo to be thread safe */ -+ tmp = __elfinfo; -+ while (*tmp) -+ ++tmp; -+ __elfinfo = tmp; -+ -+ for (aux_ptr = (__diet_elf_addr_t *)(tmp+1); aux_ptr[0]!=AT_NULL; aux_ptr += 2) ++ for (aux_ptr = __elfinfo; aux_ptr[0]!=AT_NULL; aux_ptr += 2) + if (aux_ptr[0]==tag) + return aux_ptr+1; + + return NULL; +} -diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20080409/libcruft/getpagesize.c ---- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize 2002-02-23 23:18:42.000000000 +0100 -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c 2008-04-13 22:19:49.000000000 +0200 -@@ -2,14 +2,25 @@ +--- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize ++++ dietlibc-0.31.20080409/libcruft/getpagesize.c +@@ -2,14 +2,23 @@ #include #include @@ -393,8 +375,6 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 + __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); + if (__likely(v)) + pgsz = *v; -+ else -+ pgsz = __DIET_PAGE_SIZE_PREDEF; + } + + return pgsz; @@ -405,9 +385,8 @@ diff -up dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize dietlibc-0.31.20 size_t getpagesize(void) __attribute__((weak,alias("__libc_getpagesize"))); - -diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h ---- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietpagesize.h 2008-04-13 22:19:49.000000000 +0200 +--- /dev/null ++++ dietlibc-0.31.20080409/dietpagesize.h @@ -0,0 +1,31 @@ +#ifndef H_DIETLIBC_DIETPAGESIZE_H +#define H_DIETLIBC_DIETPAGESIZE_H @@ -440,24 +419,28 @@ diff -up /dev/null dietlibc-0.31.20080409/dietpagesize.h +#endif + +#endif /* H_DIETLIBC_DIETPAGESIZE_H */ -diff -up dietlibc-0.31.20080409/s390x/start.S.pagesize dietlibc-0.31.20080409/s390x/start.S ---- dietlibc-0.31.20080409/s390x/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390x/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -26,6 +26,11 @@ _start: +--- dietlibc-0.31.20080409/s390x/start.S.pagesize ++++ dietlibc-0.31.20080409/s390x/start.S +@@ -26,6 +26,17 @@ _start: larl %r13,environ stg %r4,0(%r13) +#ifdef WANT_ELFINFO -+ ahi %r13, 8 /* TODO: does it really point to __elfinfo? */ ++# error "VERIFY ME!" ++1: aghi %r4, 8 # increment envp ++ lg %r12, -8(0,%r4) # load envp[-1] into %r12 ++ ogr %r12, %r12 # test %r12 for NULL ++ brc 1, 1b ++ ++ aghi %r13, 8 + stg %r4,0(%r13) +#endif + /* call main or _dyn_start */ #ifdef WANT_DYNAMIC brasl %r14,_dyn_start -diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h ---- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/dietelfinfo.h 2008-04-13 22:21:09.000000000 +0200 +--- /dev/null ++++ dietlibc-0.31.20080409/dietelfinfo.h @@ -0,0 +1,20 @@ +#include "dietfeatures.h" + @@ -479,14 +462,18 @@ diff -up /dev/null dietlibc-0.31.20080409/dietelfinfo.h +__diet_elf_addr_t * __get_elf_aux_value(unsigned int tag) + __attribute__((__visibility__("hidden"),__const__)) __pure; +#endif -diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia64/start.S ---- dietlibc-0.31.20080409/ia64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ia64/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -40,6 +40,11 @@ _start: +--- dietlibc-0.31.20080409/ia64/start.S.pagesize ++++ dietlibc-0.31.20080409/ia64/start.S +@@ -40,6 +40,16 @@ _start: ;; st8 [r14] = out2 /* store envp in environ */ +#ifdef WANT_ELFINFO ++# error "MAKE ME IE64 CODE!" ++1: ld8 r9 = [out2], 8 /* load *envp and increment it */ ++ orr r9 = r9, r9 /* test for NULL */ ++ bne 1b ++ + adds r14 = 8, r14 /* __elfinfo = environ + 8 */ + st8 [r14] = out2 /* store envp in __elfinfo */ +#endif @@ -494,23 +481,24 @@ diff -up dietlibc-0.31.20080409/ia64/start.S.pagesize dietlibc-0.31.20080409/ia6 #ifdef WANT_DYNAMIC /* FIXME: dl_init parameter ??? */ br.call.sptk.few rp = _dyn_start -diff -up dietlibc-0.31.20080409/i386/start.S.pagesize dietlibc-0.31.20080409/i386/start.S ---- dietlibc-0.31.20080409/i386/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/i386/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -25,6 +25,10 @@ _start: +--- dietlibc-0.31.20080409/i386/start.S.pagesize ++++ dietlibc-0.31.20080409/i386/start.S +@@ -25,6 +25,13 @@ _start: PIC_INIT /* non-PIC: this is an empty line */ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ +#ifdef WANT_ELFINFO ++1: add $4, %eax /* increment envp */ ++ cmpl $0, -4(%eax) /* load envp[-1] */ ++ jne 1b /* ... until envp[-1]==NULL */ + PUT_VAR %eax, __elfinfo, %ecx +#endif + #ifdef PROFILING pushl $_etext pushl $.text -diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/dietdirent.h ---- dietlibc-0.31.20080409/dietdirent.h.pagesize 2002-07-03 22:33:37.000000000 +0200 -+++ dietlibc-0.31.20080409/dietdirent.h 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/dietdirent.h.pagesize ++++ dietlibc-0.31.20080409/dietdirent.h @@ -1,8 +1,12 @@ #include @@ -525,23 +513,26 @@ diff -up dietlibc-0.31.20080409/dietdirent.h.pagesize dietlibc-0.31.20080409/die }; /* stream data from opendir() */ + +#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) -diff -up dietlibc-0.31.20080409/alpha/start.S.pagesize dietlibc-0.31.20080409/alpha/start.S ---- dietlibc-0.31.20080409/alpha/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/alpha/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -24,6 +24,10 @@ _start: +--- dietlibc-0.31.20080409/alpha/start.S.pagesize ++++ dietlibc-0.31.20080409/alpha/start.S +@@ -24,6 +24,15 @@ _start: stq $18, environ +#ifdef WANT_ELFINFO ++# error "MAKE ME alpha ASSEMBLER!" ++1: ldq $19, $18 ; load *envp into $19 ++ addq $18, 1, $18 ; increment *envp ++ orr $19, $19, $19 ++ jne 1b + stq $18, __elfinfo +#endif + #ifdef WANT_DYNAMIC /* in v0 ($0) is the ld.so _fini pointer */ mov $0, $19 /* mov v0(dynload) to a3 */ -diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.20080409/syscalls.s/environ.S ---- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize 2004-09-28 02:01:30.000000000 +0200 -+++ dietlibc-0.31.20080409/syscalls.s/environ.S 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize ++++ dietlibc-0.31.20080409/syscalls.s/environ.S @@ -1,6 +1,7 @@ .section ".bss" .align 8 @@ -573,10 +564,9 @@ diff -up dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize dietlibc-0.31.2008 +#endif +.size __elfinfo,.-__elfinfo +#endif -diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/start.S ---- dietlibc-0.31.20080409/arm/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/arm/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -23,11 +23,15 @@ _start: +--- dietlibc-0.31.20080409/arm/start.S.pagesize ++++ dietlibc-0.31.20080409/arm/start.S +@@ -23,11 +23,18 @@ _start: #ifdef __DYN_LIB ldr sl, .L4 1: add sl, pc, sl @@ -587,27 +577,34 @@ diff -up dietlibc-0.31.20080409/arm/start.S.pagesize dietlibc-0.31.20080409/arm/ #endif +#ifdef WANT_ELFINFO ++1: ldr r5, [a3], #4 @ load *envp and increment it ++ orr r5, r5, r5 @ read value==0? ++ bne 1b + str a3, [ip, #4] @ __elfinfo = envp +#endif + #ifdef PROFILING stmdb sp!, { r0 - r3 } ldr r0, .L5 -@@ -70,6 +74,3 @@ _exit: +@@ -70,6 +77,3 @@ _exit: .L5: .word .text .L6: .word _etext #endif - - - -diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/parisc/start.S ---- dietlibc-0.31.20080409/parisc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/parisc/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -34,6 +34,11 @@ _start: +--- dietlibc-0.31.20080409/parisc/start.S.pagesize ++++ dietlibc-0.31.20080409/parisc/start.S +@@ -34,6 +34,16 @@ _start: ldil LP%environ, %r19 ldo RP%environ(%r19), %r19 +#ifdef WANT_ELFINFO ++# error "MAKE ME PARISC CODE!" ++1: add %r20, %r19, %r19 ; envp += 4 ++ ldw -4(0,%r19), %r21 ; load envp[-4] into %r21 ++ comibf =,0, 0,%21,1b ; compare %21 with 0 without nullification ++ + ldil LP%__elfinfo, %r19 + ldo RP%__elfinfo(%r19), %r19 +#endif @@ -615,9 +612,8 @@ diff -up dietlibc-0.31.20080409/parisc/start.S.pagesize dietlibc-0.31.20080409/p /* Expand the stack to store the 5th through 7th args */ ldo 64(%sp), %sp -diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.20080409/include/sys/shm.h ---- dietlibc-0.31.20080409/include/sys/shm.h.pagesize 2005-09-21 09:33:08.000000000 +0200 -+++ dietlibc-0.31.20080409/include/sys/shm.h 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/include/sys/shm.h.pagesize ++++ dietlibc-0.31.20080409/include/sys/shm.h @@ -60,15 +60,6 @@ struct shm_info { unsigned long swap_successes; }; @@ -634,14 +630,19 @@ diff -up dietlibc-0.31.20080409/include/sys/shm.h.pagesize dietlibc-0.31.2008040 extern int shmget(key_t key, int size, int shmflg) __THROW; extern void *shmat(int shmid, const void *shmaddr, int shmflg) __THROW; extern int shmdt (const void *shmaddr) __THROW; -diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sparc/start.S ---- dietlibc-0.31.20080409/sparc/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -25,6 +25,11 @@ _start: +--- dietlibc-0.31.20080409/sparc/start.S.pagesize ++++ dietlibc-0.31.20080409/sparc/start.S +@@ -25,6 +25,17 @@ _start: or %o3, %lo(environ), %o3 st %o2, [%o3] +#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: add %o2, %o2, 4 ++ ld [%o2-4], %o4 ++ orcc %o4, %o4, %o4 ++ bne 1b ++ + add %o3, %o3, 4 + st %o2, [%o3] +#endif @@ -649,9 +650,8 @@ diff -up dietlibc-0.31.20080409/sparc/start.S.pagesize dietlibc-0.31.20080409/sp /* When starting a binary via the dynamic linker, %g1 contains the address of the shared library termination function, which will be registered with atexit(). If we are statically linked, this will -diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sparc/shmat.c ---- dietlibc-0.31.20080409/sparc/shmat.c.pagesize 2001-06-16 19:48:57.000000000 +0200 -+++ dietlibc-0.31.20080409/sparc/shmat.c 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/sparc/shmat.c.pagesize ++++ dietlibc-0.31.20080409/sparc/shmat.c @@ -3,17 +3,15 @@ #include #include @@ -673,26 +673,26 @@ diff -up dietlibc-0.31.20080409/sparc/shmat.c.pagesize dietlibc-0.31.20080409/sp result=raddr; return result; } -diff -up dietlibc-0.31.20080409/ppc64/start.S.pagesize dietlibc-0.31.20080409/ppc64/start.S ---- dietlibc-0.31.20080409/ppc64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/ppc64/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -58,6 +58,12 @@ _start: +--- dietlibc-0.31.20080409/ppc64/start.S.pagesize ++++ dietlibc-0.31.20080409/ppc64/start.S +@@ -58,6 +58,14 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) +#ifdef WANT_ELFINFO -+ /* TODO: can we really assume that environ and __elfinfo are on the -+ same 16 bit page? */ ++1: ldu 15,8(5) ++ cmpdi 15,0 ++ bne 1b ++ + std 5,__elfinfo@l(14) +#endif + #ifdef WANT_DYNAMIC /* #warning dynamic */ mr 6,7 -diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x86_64/start.S ---- dietlibc-0.31.20080409/x86_64/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/x86_64/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -12,12 +12,23 @@ _start: +--- dietlibc-0.31.20080409/x86_64/start.S.pagesize ++++ dietlibc-0.31.20080409/x86_64/start.S +@@ -12,12 +12,28 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -703,7 +703,12 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x +#else + leaq environ(%rip), %rax +#endif -+ movq %rdx, (%rax) /* environ */ ++ movq %rdx, (%rax) /* environ */ ++ ++1: add $8, %rdx /* increment envp */ ++ cmpq $0, -8(%rdx) /* load envp[-1] */ ++ jne 1b /* ... until envp[-1]==NULL */ ++ + movq %rdx, 8(%rax) /* __elfinfo */ +#else #ifdef __DYN_LIB @@ -716,24 +721,28 @@ diff -up dietlibc-0.31.20080409/x86_64/start.S.pagesize dietlibc-0.31.20080409/x #ifdef PROFILING pushq %rdi /* save reg args */ -diff -up dietlibc-0.31.20080409/s390/start.S.pagesize dietlibc-0.31.20080409/s390/start.S ---- dietlibc-0.31.20080409/s390/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/s390/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -30,6 +30,11 @@ _start: +--- dietlibc-0.31.20080409/s390/start.S.pagesize ++++ dietlibc-0.31.20080409/s390/start.S +@@ -30,6 +30,17 @@ _start: l %r1,8(%r13) st %r4,0(%r1) +#ifdef WANT_ELFINFO -+ ahi %r1, 4 # TODO: does it really point to __elfinfo now? ++# error "VERIFY ME!" ++1: ahi %r4, 4 # increment envp ++ l %r12, -4(0,%r4) # load envp[-1] into %r12 ++ or %r12, %r12 # test %r12 for NULL ++ brc 1, 1b ++ ++ ahi %r1, 4 + st %r4,0(%r1) +#endif + /* call main or _dyn_start */ l %r1,0(%r13) basr %r14,%r1 -diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20080409/dynlinker/ldso_start.S ---- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize 2006-10-13 22:11:13.000000000 +0200 -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S 2008-04-13 22:19:49.000000000 +0200 +--- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize ++++ dietlibc-0.31.20080409/dynlinker/ldso_start.S @@ -86,6 +86,15 @@ __environ: .long 0 #endif @@ -750,14 +759,19 @@ diff -up dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize dietlibc-0.31.20 .global fini_entry fini_entry: .long 0 -diff -up dietlibc-0.31.20080409/mips/start.S.pagesize dietlibc-0.31.20080409/mips/start.S ---- dietlibc-0.31.20080409/mips/start.S.pagesize 2006-04-04 07:35:14.000000000 +0200 -+++ dietlibc-0.31.20080409/mips/start.S 2008-04-13 22:19:49.000000000 +0200 -@@ -47,6 +47,9 @@ __start: +--- dietlibc-0.31.20080409/mips/start.S.pagesize ++++ dietlibc-0.31.20080409/mips/start.S +@@ -47,6 +47,15 @@ __start: #endif add $a2, $a2, $a1 sw $a2, environ +#ifdef WANT_ELFINFO ++# error "MAKE ME MIPS CODE!" ++1: addu $a2, $a2, 4 /* increment envp */ ++ lw $4, -4($a2) /* load envp[-1]; TODO: is $4 a proper ++ temporary register? */ ++ bnz 1b /* ... until envp[-1]==NULL ++ TODO: use proper 'bnz' operation */ + sw $a2, __elfinfo +#endif jalr $25 From 32e271ef765c8d49ea9763ad24311e5f2e8e760a Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:21:18 +0000 Subject: [PATCH 56/65] added changelog entry --- dietlibc.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dietlibc.spec b/dietlibc.spec index 0cca379..7c4194a 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -30,7 +30,7 @@ Summary: Small libc implementation Name: dietlibc Version: 0.31 -Release: %release_func 3%{?snapshot:.%snapshot} +Release: %release_func 4%{?snapshot:.%snapshot} License: GPL Group: Development/Libraries URL: http://www.fefe.de/dietlibc/ @@ -201,6 +201,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Sat Apr 19 2008 Enrico Scholz - 0.31-4.20080409 +- update -pagesize patch + * Mon Apr 14 2008 Enrico Scholz - 0.31-3.20080409 - removed debug stuff from specfile - updated patches to work with new isinf() behavior of gcc 4.3 From d9ffe98eab0e3b4e71ff173fdb427fb79cf85fb1 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:22:29 +0000 Subject: [PATCH 57/65] fixed post-increment issue on ppc* die when AT_PAGESZ entry is empty --- dietlibc-0.31-pagesize.patch | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index 7a9f71e..62a0790 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -129,12 +129,13 @@ register size_t idx=0; --- dietlibc-0.31.20080409/ppc/start.S.pagesize +++ dietlibc-0.31.20080409/ppc/start.S -@@ -31,6 +31,14 @@ _start: +@@ -31,6 +31,15 @@ _start: lis 14,environ@ha stw 5,environ@l(14) +#ifdef WANT_ELFINFO -+1: lwzu 15,4(5) ++1: lwzu 15,0(5) ++ addi 5, 5, 4 + cmpwi 15,0 + bne 1b + @@ -355,7 +356,7 @@ +} --- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize +++ dietlibc-0.31.20080409/libcruft/getpagesize.c -@@ -2,14 +2,23 @@ +@@ -2,14 +2,22 @@ #include #include @@ -373,8 +374,7 @@ + + if (__unlikely(pgsz==0)) { + __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); -+ if (__likely(v)) -+ pgsz = *v; ++ pgsz = *v; /* causes segfault when 'v==NULL' */ + } + + return pgsz; @@ -675,12 +675,13 @@ } --- dietlibc-0.31.20080409/ppc64/start.S.pagesize +++ dietlibc-0.31.20080409/ppc64/start.S -@@ -58,6 +58,14 @@ _start: +@@ -58,6 +58,15 @@ _start: oris 14,14,environ@ha std 5,environ@l(14) +#ifdef WANT_ELFINFO -+1: ldu 15,8(5) ++1: ldu 15,0(5) ++ addi 5, 5, 8 + cmpdi 15,0 + bne 1b + From cb43a352c953ecd6f422ec989f5fc782cd861bb6 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:23:39 +0000 Subject: [PATCH 58/65] fixed __signalfd() prototype --- dietlibc-0.31-implicitfunc.patch | 2 +- dietlibc.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dietlibc-0.31-implicitfunc.patch b/dietlibc-0.31-implicitfunc.patch index d9dace4..26647df 100644 --- a/dietlibc-0.31-implicitfunc.patch +++ b/dietlibc-0.31-implicitfunc.patch @@ -5,7 +5,7 @@ diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.200804 #include #include -+extern int __signalfd(int fd, const sigset_t *mask, int flags); ++extern int __signalfd(int fd, const sigset_t *mask, size_t flags); + int signalfd(int fd,const sigset_t* mask,int flags) { if (flags) { /* bizarre glibc bullshit */ diff --git a/dietlibc.spec b/dietlibc.spec index 7c4194a..6de0312 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -30,7 +30,7 @@ Summary: Small libc implementation Name: dietlibc Version: 0.31 -Release: %release_func 4%{?snapshot:.%snapshot} +Release: %release_func 5%{?snapshot:.%snapshot} License: GPL Group: Development/Libraries URL: http://www.fefe.de/dietlibc/ @@ -201,6 +201,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Sun May 18 2008 Enrico Scholz - 0.31-5.20080409 +- fixed __signalfd() prototype + * Sat Apr 19 2008 Enrico Scholz - 0.31-4.20080409 - update -pagesize patch From 0e17d63d8d268aacba2c6c8722cdc0063d338d0c Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:24:44 +0000 Subject: [PATCH 59/65] include --- dietlibc-0.31-implicitfunc.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dietlibc-0.31-implicitfunc.patch b/dietlibc-0.31-implicitfunc.patch index 26647df..541303d 100644 --- a/dietlibc-0.31-implicitfunc.patch +++ b/dietlibc-0.31-implicitfunc.patch @@ -1,9 +1,10 @@ diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.20080409/lib/signalfd.c --- dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc 2008-02-19 01:28:13.000000000 +0100 +++ dietlibc-0.31.20080409/lib/signalfd.c 2008-04-13 22:52:10.000000000 +0200 -@@ -1,6 +1,8 @@ +@@ -1,6 +1,9 @@ #include #include ++#include +extern int __signalfd(int fd, const sigset_t *mask, size_t flags); + From 85dd4738e79788c74dbfee522bb6de34d6843d99 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:26:08 +0000 Subject: [PATCH 60/65] use patches from git repository; rediffed against 20080517 --- dietlibc-0.28-setpriority.patch | 19 +- dietlibc-0.29-scall.patch | 27 +- dietlibc-0.30-longdouble.patch | 22 +- dietlibc-0.31-defpath.patch | 20 +- dietlibc-0.31-implicitfunc.patch | 72 +- dietlibc-0.31-lcctime.patch | 32 +- dietlibc-0.31-noreturn.patch | 25 +- dietlibc-0.31-pagesize.patch | 1387 +++++++++++++---------- dietlibc-0.31-printFG.patch | 101 +- dietlibc-0.31-stacksmash-dyn.patch | 21 +- dietlibc-0.31-stacksmash.patch | 60 +- dietlibc-0.31-stat64.patch | 88 -- dietlibc-0.31-testsuite.patch | 513 +++++---- dietlibc-0.31.20080212-teststdout.patch | 59 +- 14 files changed, 1396 insertions(+), 1050 deletions(-) delete mode 100644 dietlibc-0.31-stat64.patch diff --git a/dietlibc-0.28-setpriority.patch b/dietlibc-0.28-setpriority.patch index 30090ed..248d18a 100644 --- a/dietlibc-0.28-setpriority.patch +++ b/dietlibc-0.28-setpriority.patch @@ -1,5 +1,17 @@ ---- dietlibc-0.28-unpatched/lib/__nice.c 2005-02-13 18:01:18.966469056 -0500 -+++ dietlibc-0.28/lib/__nice.c 2005-02-13 18:17:04.381744088 -0500 +From ab91f175a8c77f275c9fa917dfe7cbc9b6262e1c Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:49:05 +0200 +Subject: [PATCH] Return new nice value for nice(2) + +Changed nice(2) to return the new nice value instead of 0/-1. +--- + lib/__nice.c | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/__nice.c b/lib/__nice.c +index d751104..8e205c0 100644 +--- a/lib/__nice.c ++++ b/lib/__nice.c @@ -1,9 +1,13 @@ #include "syscalls.h" -#include @@ -16,3 +28,6 @@ + return getpriority(PRIO_PROCESS,0); } #endif +-- +1.5.4.5 + diff --git a/dietlibc-0.29-scall.patch b/dietlibc-0.29-scall.patch index ee07d62..526306b 100644 --- a/dietlibc-0.29-scall.patch +++ b/dietlibc-0.29-scall.patch @@ -1,12 +1,20 @@ -2005-04-24 Enrico Scholz - * libcompat/syscall.S: catch the case when syscall(2) is not - implemented for the actual arch instead of jumping to the next - function and executing the wrong code +From 406e0419735c9e9c00290d437e9f42f88c3ae6d2 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:50:24 +0200 +Subject: [PATCH] Sanity checks for syscall availability ---- dietlibc-0.29/libcompat/syscall.S.scall -+++ dietlibc-0.29/libcompat/syscall.S -@@ -120,6 +120,12 @@ - nop +Catch the case when syscall(2) is not implemented for the actual arch +instead of jumping to the next function and executing the wrong code +--- + libcompat/syscall.S | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/libcompat/syscall.S b/libcompat/syscall.S +index c9f72bb..6b6a8aa 100644 +--- a/libcompat/syscall.S ++++ b/libcompat/syscall.S +@@ -130,6 +130,12 @@ syscall: + b __unified_syscall #else - /* arch not implemented yet */ @@ -19,3 +27,6 @@ +#endif #endif .size syscall, . - syscall +-- +1.5.4.5 + diff --git a/dietlibc-0.30-longdouble.patch b/dietlibc-0.30-longdouble.patch index 04c675e..9defbe7 100644 --- a/dietlibc-0.30-longdouble.patch +++ b/dietlibc-0.30-longdouble.patch @@ -1,6 +1,19 @@ ---- dietlibc-0.30/libm/gamma.c~ 2005-03-15 08:51:23.000000000 +0000 -+++ dietlibc-0.30/libm/gamma.c 2006-12-28 14:36:58.000000000 +0000 -@@ -33,19 +33,19 @@ Return value gamma returns a value in +From ba4e9f8557b25e4fbb6886e7c54a2ca75ca57368 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:54:03 +0200 +Subject: [PATCH] Workaround PPC build issues + +Fixes https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=182118 and +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27054 +--- + libm/gamma.c | 26 +++++++++++++------------- + 1 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/libm/gamma.c b/libm/gamma.c +index 9682f35..370bec6 100644 +--- a/libm/gamma.c ++++ b/libm/gamma.c +@@ -33,19 +33,19 @@ Return value gamma returns a value in range (-0.1208, +oo). For a input #include #include @@ -33,3 +46,6 @@ static const double coeff[] = { B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10 }; int signgam; +-- +1.5.4.5 + diff --git a/dietlibc-0.31-defpath.patch b/dietlibc-0.31-defpath.patch index c0878da..1543af1 100644 --- a/dietlibc-0.31-defpath.patch +++ b/dietlibc-0.31-defpath.patch @@ -1,6 +1,17 @@ -diff -up dietlibc-0.31/include/paths.h.~1~ dietlibc-0.31/include/paths.h ---- dietlibc-0.31/include/paths.h.defpath -+++ dietlibc-0.31/include/paths.h +From 66528a176d332bb8de4ddf324754089e59139424 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 18:00:19 +0200 +Subject: [PATCH] Security fix for proper $PATH + +Removed '.' from the default $PATH. +--- + include/paths.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/include/paths.h b/include/paths.h +index 553b4fa..9bf216f 100644 +--- a/include/paths.h ++++ b/include/paths.h @@ -2,7 +2,7 @@ #define _PATHS_H @@ -10,3 +21,6 @@ diff -up dietlibc-0.31/include/paths.h.~1~ dietlibc-0.31/include/paths.h #define _PATH_DEVNULL "/dev/null" +-- +1.5.4.5 + diff --git a/dietlibc-0.31-implicitfunc.patch b/dietlibc-0.31-implicitfunc.patch index 541303d..bcd7057 100644 --- a/dietlibc-0.31-implicitfunc.patch +++ b/dietlibc-0.31-implicitfunc.patch @@ -1,19 +1,41 @@ -diff -up dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc dietlibc-0.31.20080409/lib/signalfd.c ---- dietlibc-0.31.20080409/lib/signalfd.c.implicitfunc 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/signalfd.c 2008-04-13 22:52:10.000000000 +0200 -@@ -1,6 +1,9 @@ - #include - #include -+#include +From 5c0e868e1a9266d580c95411c3b2f0272dfa14ab Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:43:08 +0200 +Subject: [PATCH] Fixes for -Werror-no-implicit-functions + +Some fixes for issues preventing builds with +'-Werror-implicit-function-declaration'. +--- + test/getservbyname.c | 1 + + test/stdlib/testsort.c | 2 ++ + test/stdlib/tst-calloc.c | 2 ++ + 3 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/test/getservbyname.c b/test/getservbyname.c +index b70ca19..caf1c9f 100644 +--- a/test/getservbyname.c ++++ b/test/getservbyname.c +@@ -1,5 +1,6 @@ + #include + #include ++#include -+extern int __signalfd(int fd, const sigset_t *mask, size_t flags); + int main(int argc,char *argv[]) { + struct servent* se; +diff --git a/test/stdlib/testsort.c b/test/stdlib/testsort.c +index aa4332a..5a92bc0 100644 +--- a/test/stdlib/testsort.c ++++ b/test/stdlib/testsort.c +@@ -1,3 +1,5 @@ ++#define _BSD_SOURCE + - int signalfd(int fd,const sigset_t* mask,int flags) { - if (flags) { /* bizarre glibc bullshit */ - errno=EINVAL; -diff -up dietlibc-0.31.20080409/test/stdlib/tst-calloc.c.implicitfunc dietlibc-0.31.20080409/test/stdlib/tst-calloc.c ---- dietlibc-0.31.20080409/test/stdlib/tst-calloc.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-calloc.c 2008-04-13 22:52:10.000000000 +0200 + #include + #include + #include +diff --git a/test/stdlib/tst-calloc.c b/test/stdlib/tst-calloc.c +index a9b9e2a..049117b 100644 +--- a/test/stdlib/tst-calloc.c ++++ b/test/stdlib/tst-calloc.c @@ -17,6 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ @@ -23,22 +45,6 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-calloc.c.implicitfunc dietlibc-0 #include #include #include -diff -up dietlibc-0.31.20080409/test/stdlib/testsort.c.implicitfunc dietlibc-0.31.20080409/test/stdlib/testsort.c ---- dietlibc-0.31.20080409/test/stdlib/testsort.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/testsort.c 2008-04-13 22:52:10.000000000 +0200 -@@ -1,3 +1,5 @@ -+#define _BSD_SOURCE -+ - #include - #include - #include -diff -up dietlibc-0.31.20080409/test/getservbyname.c.implicitfunc dietlibc-0.31.20080409/test/getservbyname.c ---- dietlibc-0.31.20080409/test/getservbyname.c.implicitfunc 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/getservbyname.c 2008-04-13 22:53:38.000000000 +0200 -@@ -1,5 +1,6 @@ - #include - #include -+#include - - int main(int argc,char *argv[]) { - struct servent* se; +-- +1.5.4.5 + diff --git a/dietlibc-0.31-lcctime.patch b/dietlibc-0.31-lcctime.patch index a559e9c..572c7ed 100644 --- a/dietlibc-0.31-lcctime.patch +++ b/dietlibc-0.31-lcctime.patch @@ -1,6 +1,20 @@ -diff -up dietlibc-0.31.20080409/libugly/strftime.c.lcctime dietlibc-0.31.20080409/libugly/strftime.c ---- dietlibc-0.31.20080409/libugly/strftime.c.lcctime 2006-08-15 18:07:15.000000000 +0200 -+++ dietlibc-0.31.20080409/libugly/strftime.c 2008-04-13 13:20:41.000000000 +0200 +From aac35698d1b84f6370d37860c9e889c34cd6a21c Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:42:20 +0200 +Subject: [PATCH] Fixes/enhancements in str?time() functions + +This patch changes the used format for %x and %X specifiers in +strptime(3) to match these specified by SUSv2. It adds support +for '%F' in strftime(3) too. +--- + libugly/strftime.c | 1 + + libugly/strptime.c | 5 +++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/libugly/strftime.c b/libugly/strftime.c +index 56ae082..cf16f37 100644 +--- a/libugly/strftime.c ++++ b/libugly/strftime.c @@ -55,6 +55,7 @@ again: case 'x': src = "%b %a %d"; goto _strf; case 'X': src = "%k:%M:%S"; goto _strf; @@ -9,10 +23,11 @@ diff -up dietlibc-0.31.20080409/libugly/strftime.c.lcctime dietlibc-0.31.2008040 case 'T': src = "%H:%M:%S"; _strf: p += strftime (p, (size_t)(dst+max-p), src, tm); break; case 'a': src = sweekdays [tm->tm_wday]; goto _str; -diff -up dietlibc-0.31.20080409/libugly/strptime.c.lcctime dietlibc-0.31.20080409/libugly/strptime.c ---- dietlibc-0.31.20080409/libugly/strptime.c.lcctime 2007-08-03 22:58:33.000000000 +0200 -+++ dietlibc-0.31.20080409/libugly/strptime.c 2008-04-13 13:13:12.000000000 +0200 -@@ -119,10 +119,11 @@ char* strptime(const char* s,const char* +diff --git a/libugly/strptime.c b/libugly/strptime.c +index 6ac5340..32dc2a7 100644 +--- a/libugly/strptime.c ++++ b/libugly/strptime.c +@@ -119,10 +119,11 @@ char* strptime(const char* s,const char* format, struct tm* tm) { ++s; break; case 'x': @@ -26,3 +41,6 @@ diff -up dietlibc-0.31.20080409/libugly/strptime.c.lcctime dietlibc-0.31.2008040 break; case 'y': i=getint(&s,2); +-- +1.5.4.5 + diff --git a/dietlibc-0.31-noreturn.patch b/dietlibc-0.31-noreturn.patch index 6b7dc69..d3f9a51 100644 --- a/dietlibc-0.31-noreturn.patch +++ b/dietlibc-0.31-noreturn.patch @@ -1,6 +1,22 @@ -diff -up dietlibc-0.31.20080409/include/stdlib.h.noreturn dietlibc-0.31.20080409/include/stdlib.h ---- dietlibc-0.31.20080409/include/stdlib.h.noreturn 2008-04-13 22:56:59.000000000 +0200 -+++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-13 22:57:54.000000000 +0200 +From e96b03324e5395ff3c0041c249bfed9aa1bdb8b5 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:43:42 +0200 +Subject: [PATCH] __noreturn__ annotation for abort(3) + +SUSv2 says about abort(3): + + The abort() function shall not return. + +Hence, an '__attribute__((__noreturn__))' should be added to the +abort(3) declaration. +--- + include/stdlib.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/include/stdlib.h b/include/stdlib.h +index 34f3a7f..0cea604 100644 +--- a/include/stdlib.h ++++ b/include/stdlib.h @@ -47,7 +47,7 @@ double atof(const char *nptr) __THROW; __extension__ long long int atoll(const char *nptr); @@ -10,3 +26,6 @@ diff -up dietlibc-0.31.20080409/include/stdlib.h.noreturn dietlibc-0.31.20080409 extern int rand(void) __THROW; extern int rand_r(unsigned int *seed) __THROW; +-- +1.5.4.5 + diff --git a/dietlibc-0.31-pagesize.patch b/dietlibc-0.31-pagesize.patch index 62a0790..666eaae 100644 --- a/dietlibc-0.31-pagesize.patch +++ b/dietlibc-0.31-pagesize.patch @@ -1,102 +1,354 @@ ---- dietlibc-0.31.20080409/lib/mmap64.c.pagesize -+++ dietlibc-0.31.20080409/lib/mmap64.c -@@ -4,16 +4,18 @@ - #include - #include +From bbeb245bbb5bc919f8f4d2049ba463ed349ef759 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:35:14 +0200 +Subject: [PATCH] Support for dynamic PAGE_SIZE + +This patch adds support for dynamic PAGE_SIZE values. It +is a little bit invasive in several aspects: + +* it modifies the startup code. We need to know the position of + the elf-info auxilary table which is located after 'environ'. + We can not use 'environ' directly because it might be modified + by the application. + + Hence, an additional __elfinfo variable is placed into .bss and + filled in the startup code. Depending on platform, this adds + 4-8 instructions and an additional pointer to .bss. + + I tested only the i386 and x86_64 modifications; it would be + nice when people with corresponding hardware would test the + other ones. I am especially uncertain regarding the parisc + changes. + + The elf-info stuff (which might be interesting e.g. for dynamic + linking or sysconf(_SC_CLK_TCK)) can be enabled without the + dynamic pagesize too. + +* it removes the 'PAGE_SIZE' macro from ; this will + break compilation of existing userspace application which are + using this deprecated macro + +* I added a new internal 'dietpagesize.h' header which defines + + | __DIET_PAGE_SIZE + | __DIET_PAGE_SHIFT + + macros. These return either builtin constants (when + WANT_DYN_PAGESIZE is not selected), or values derived from + __libc_getpagesize(). + + Every usage of PAGE_SIZE in dietlibc code was replaced by these + macros. + +* due to the previous point, the internal 'struct __dirstream' + was modified. I replaced + + | getdents64(d->fd,(struct dirent64*)d->buf, sizeof (d->buf)-1); + + with + + | getdents64(d->fd,(struct dirent64*)d->buf, __DIRSTREAM_BUF_SIZE-1); + + literally but I am not sure where the '-1' is coming from. + There is one hunk, where this '-1' is missing so I think the + '-1' should be removed from all calls to getdents64(). + +* changes affect the *alloc() functions too; on x86_64 around 64 + bytes were added to .text of alloc.o + +* the new testprogramm requires a 'getconf' binary which returns + the correct values for PAGE_SIZE and CLK_TCK + +Patch seems to work fine on i386, x86_64, ppc and ppc64. Things +went a little bit complicated with linux 2.6.25; previous kernels +exported a elf_addr_t type in which is used in the +auxilary elf-info table. Now, this is not available anymore and I +use a type derived from __WORD_SIZE. +--- + alpha/start.S | 9 ++++ + arm/start.S | 12 ++++-- + dietdirent.h | 6 ++- + dietelfinfo.h | 20 ++++++++++ + dietfeatures.h | 14 +++++++ + dietpagesize.h | 31 +++++++++++++++ + dynlinker/ldso_start.S | 9 ++++ + i386/start.S | 7 +++ + ia64/start.S | 10 +++++ + include/sys/shm.h | 9 ---- + lib/alloc.c | 9 ++-- + lib/closedir.c | 4 +- + lib/mmap64.c | 6 ++- + lib/opendir.c | 4 +- + lib/readdir.c | 2 +- + lib/readdir64.c | 6 +- + libcruft/__get_elf_aux_value.c | 14 +++++++ + libcruft/getpagesize.c | 20 +++++++--- + libcruft/sysconf.c | 17 ++++++-- + mips/start.S | 9 ++++ + parisc/start.S | 10 +++++ + ppc/start.S | 9 ++++ + ppc64/start.S | 9 ++++ + s390/start.S | 11 +++++ + s390x/start.S | 11 +++++ + sparc/shmat.c | 8 +-- + sparc/start.S | 11 +++++ + sparc64/start.S | 11 +++++ + syscalls.s/environ.S | 20 ++++++++++ + test/Makefile | 2 +- + test/runtests.sh | 2 +- + test/sysconf.c | 80 ++++++++++++++++++++++++++++++++++++++++ + x86_64/start.S | 16 ++++++++ + 33 files changed, 374 insertions(+), 44 deletions(-) + create mode 100644 dietelfinfo.h + create mode 100644 dietpagesize.h + create mode 100644 libcruft/__get_elf_aux_value.c + create mode 100644 test/sysconf.c + +diff --git a/alpha/start.S b/alpha/start.S +index 7e7cf9b..e5e64a1 100644 +--- a/alpha/start.S ++++ b/alpha/start.S +@@ -24,6 +24,15 @@ _start: -+#include "../dietpagesize.h" + stq $18, environ + ++#ifdef WANT_ELFINFO ++# error "MAKE ME alpha ASSEMBLER!" ++1: ldq $19, $18 ; load *envp into $19 ++ addq $18, 1, $18 ; increment *envp ++ orr $19, $19, $19 ++ jne 1b ++ stq $18, __elfinfo ++#endif + - #ifdef __NR_mmap2 - void*__mmap2(void*start,size_t length,int prot,int flags,int fd,off_t pgoffset); - - void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset); - void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) { -- if (offset&(PAGE_SIZE-1)) { -+ if (offset&(__DIET_PAGE_SIZE)) { - errno=-EINVAL; - return MAP_FAILED; - } -- return __mmap2(addr,len,prot,flags,fd,offset>>PAGE_SHIFT); -+ return __mmap2(addr,len,prot,flags,fd,offset>>__DIET_PAGE_SHIFT); - } - - void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) ---- dietlibc-0.31.20080409/lib/readdir64.c.pagesize -+++ dietlibc-0.31.20080409/lib/readdir64.c -@@ -14,7 +14,7 @@ - #ifndef WANT_LARGEFILE_BACKCOMPAT - struct dirent64* readdir64(DIR *d) { - if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { -- int res=getdents64(d->fd,(struct dirent64*)d->buf, sizeof (d->buf)-1); -+ int res=getdents64(d->fd,(struct dirent64*)d->buf, __DIRSTREAM_BUF_SIZE-1); - if (res<=0) return 0; - d->num=res; d->cur=0; - } -@@ -32,7 +32,7 @@ again: - if (!trygetdents64) { + #ifdef WANT_DYNAMIC + /* in v0 ($0) is the ld.so _fini pointer */ + mov $0, $19 /* mov v0(dynload) to a3 */ +diff --git a/arm/start.S b/arm/start.S +index fcd3d7c..e7e3be7 100644 +--- a/arm/start.S ++++ b/arm/start.S +@@ -23,11 +23,18 @@ _start: + #ifdef __DYN_LIB + ldr sl, .L4 + 1: add sl, pc, sl +- str a3, [sl, ip] @ environ = envp ++ str a3, [ip, sl]! @ environ = envp; ip = GOT(environ) + #else + str a3, [ip, #0] @ environ = envp #endif - if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { -- int res=getdents(d->fd,(struct dirent*)d->buf, sizeof (d->buf)-1); -+ int res=getdents(d->fd,(struct dirent*)d->buf, __DIRSTREAM_BUF_SIZE-1); - if (res<=0) return 0; - d->num=res; d->cur=0; - } -@@ -46,7 +46,7 @@ again: - #ifdef __NR_getdents64 - } - if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { -- int res=getdents64(d->fd,(struct dirent64*)d->buf,sizeof (d->buf)); -+ int res=getdents64(d->fd,(struct dirent64*)d->buf,__DIRSTREAM_BUF_SIZE); - if (res<=0) { - if (errno==ENOSYS) { - trygetdents64=0; ---- dietlibc-0.31.20080409/lib/opendir.c.pagesize -+++ dietlibc-0.31.20080409/lib/opendir.c -@@ -5,6 +5,8 @@ - #include - #include -+#include "../dietpagesize.h" ++#ifdef WANT_ELFINFO ++1: ldr r5, [a3], #4 @ load *envp and increment it ++ orr r5, r5, r5 @ read value==0? ++ bne 1b ++ str a3, [ip, #4] @ __elfinfo = envp ++#endif + - DIR* opendir ( const char* name ) { - int fd = open (name, O_RDONLY | O_DIRECTORY); - DIR* t = NULL; -@@ -12,7 +14,7 @@ DIR* opendir ( const char* name ) { - if ( fd >= 0 ) { - if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) - goto lose; -- t = (DIR *) mmap (NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, -+ t = (DIR *) mmap (NULL, __DIET_PAGE_SIZE, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (t == MAP_FAILED) - lose: ---- dietlibc-0.31.20080409/lib/readdir.c.pagesize -+++ dietlibc-0.31.20080409/lib/readdir.c -@@ -5,7 +5,7 @@ + #ifdef PROFILING + stmdb sp!, { r0 - r3 } + ldr r0, .L5 +@@ -70,6 +77,3 @@ _exit: + .L5: .word .text + .L6: .word _etext + #endif +- +- +- +diff --git a/dietdirent.h b/dietdirent.h +index dbd7206..c9c7127 100644 +--- a/dietdirent.h ++++ b/dietdirent.h +@@ -1,8 +1,12 @@ + #include - struct dirent* readdir(DIR *d) { - if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { -- int res=getdents(d->fd,(struct dirent*)d->buf,sizeof (d->buf)-1); -+ int res=getdents(d->fd,(struct dirent*)d->buf,__DIRSTREAM_BUF_SIZE-1); - if (res<=0) return 0; - d->num=res; d->cur=0; - } ---- dietlibc-0.31.20080409/lib/closedir.c.pagesize -+++ dietlibc-0.31.20080409/lib/closedir.c -@@ -4,8 +4,10 @@ - #include - #include - -+#include "../dietpagesize.h" ++#include "dietpagesize.h" + - int closedir (DIR* d) { - int res=close(d->fd); -- munmap (d, PAGE_SIZE); -+ munmap (d, __DIET_PAGE_SIZE); - return res; - } ---- dietlibc-0.31.20080409/lib/alloc.c.pagesize -+++ dietlibc-0.31.20080409/lib/alloc.c + struct __dirstream { + int fd; +- char buf[PAGE_SIZE-(sizeof (int)*3)]; + unsigned int num; + unsigned int cur; ++ char buf[]; + }; /* stream data from opendir() */ ++ ++#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) +diff --git a/dietelfinfo.h b/dietelfinfo.h +new file mode 100644 +index 0000000..f18627b +--- /dev/null ++++ b/dietelfinfo.h +@@ -0,0 +1,20 @@ ++#include "dietfeatures.h" ++ ++#ifdef WANT_ELFINFO ++#include ++#include ++#include ++ ++/* TODO: exported interface from has been changed in 2.6.25 so ++ * the 'elf_addr_t' type is not available anymore. Hence, derive it from ++ * __WORDSIZE__. */ ++ ++#if __WORDSIZE == 64 ++typedef uint64_t __diet_elf_addr_t; ++#elif __WORDSIZE == 32 ++typedef uint32_t __diet_elf_addr_t; ++#endif ++ ++__diet_elf_addr_t * __get_elf_aux_value(unsigned int tag) ++ __attribute__((__visibility__("hidden"),__const__)) __pure; ++#endif +diff --git a/dietfeatures.h b/dietfeatures.h +index 5ad8f38..2993b9e 100644 +--- a/dietfeatures.h ++++ b/dietfeatures.h +@@ -126,6 +126,16 @@ + /* #define WANT_SSP_XOR */ + + ++/* Some platforms like x86_64, ppc* or mips do not have a fixed PAGE_SIZE. ++ * Select WANT_DYN_PAGESIZE to detect the current PAGE_SIZE at runtime. Else, ++ * define WANT_STATIC_PAGESIZE to a proper value (must be a power of 2) ++ * matching the configured pagesize of the kernel where your binaries are ++ * running on. ++ * ++ * Selecting WANT_DYN_PAGESIZE enlarges the startup code by around 1-3 ++ * instructions and might add an additional __elfinfo symbol */ ++#define WANT_DYN_PAGESIZE ++/* #define WANT_STATIC_PAGESIZE 0x10000UL */ + + + /* stop uncommenting here ;-) */ +@@ -157,4 +167,8 @@ + #endif + #endif + ++#ifdef WANT_DYN_PAGESIZE ++#define WANT_ELFINFO ++#endif ++ + #endif +diff --git a/dietpagesize.h b/dietpagesize.h +new file mode 100644 +index 0000000..8ce6ce7 +--- /dev/null ++++ b/dietpagesize.h +@@ -0,0 +1,31 @@ ++#ifndef H_DIETLIBC_DIETPAGESIZE_H ++#define H_DIETLIBC_DIETPAGESIZE_H ++ ++#include ++#include "dietfeatures.h" ++ ++extern size_t __libc_getpagesize(void) __attribute__((__const__)) __pure; ++ ++#if defined(WANT_STATIC_PAGESIZE) ++# define __DIET_PAGE_SIZE_PREDEF (WANT_STATIC_PAGESIZE) ++# define __DIET_PAGE_SHIFT_PREDEF (ffs(__DIET_PAGE_SIZE_PREDEF)-1) ++#elif defined(__alpha__) || defined(__sparc__) ++# define __DIET_PAGE_SIZE_PREDEF (8192UL) ++# define __DIET_PAGE_SHIFT_PREDEF (13) ++#elif defined(__powerpc64__) ++# define __DIET_PAGE_SIZE_PREDEF (65536UL) ++# define __DIET_PAGE_SHIFT_PREDEF (16) ++#else ++# define __DIET_PAGE_SIZE_PREDEF (4096UL) ++# define __DIET_PAGE_SHIFT_PREDEF (12) ++#endif ++ ++#ifdef WANT_DYN_PAGESIZE ++# define __DIET_PAGE_SIZE (__libc_getpagesize()) ++# define __DIET_PAGE_SHIFT (ffs(__DIET_PAGE_SIZE)-1) ++#else ++# define __DIET_PAGE_SIZE __DIET_PAGE_SIZE_PREDEF ++# define __DIET_PAGE_SHIFT __DIET_PAGE_SHIFT_PREDEF ++#endif ++ ++#endif /* H_DIETLIBC_DIETPAGESIZE_H */ +diff --git a/dynlinker/ldso_start.S b/dynlinker/ldso_start.S +index ca278d7..7234f69 100644 +--- a/dynlinker/ldso_start.S ++++ b/dynlinker/ldso_start.S +@@ -86,6 +86,15 @@ __environ: + .long 0 + #endif + ++/* __elfinfo must follow __environ immediately */ ++.global __elfinfo ++__elfinfo: ++#if __WORDSIZE == 64 ++ .quad 0 ++#else ++ .long 0 ++#endif ++ + .global fini_entry + fini_entry: + .long 0 +diff --git a/i386/start.S b/i386/start.S +index 94a4f73..0c2c71d 100644 +--- a/i386/start.S ++++ b/i386/start.S +@@ -25,6 +25,13 @@ _start: + PIC_INIT /* non-PIC: this is an empty line */ + PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ + ++#ifdef WANT_ELFINFO ++1: add $4, %eax /* increment envp */ ++ cmpl $0, -4(%eax) /* load envp[-1] */ ++ jne 1b /* ... until envp[-1]==NULL */ ++ PUT_VAR %eax, __elfinfo, %ecx ++#endif ++ + #ifdef PROFILING + pushl $_etext + pushl $.text +diff --git a/ia64/start.S b/ia64/start.S +index 50fd015..bac10cb 100644 +--- a/ia64/start.S ++++ b/ia64/start.S +@@ -40,6 +40,16 @@ _start: + ;; + st8 [r14] = out2 /* store envp in environ */ + ++#ifdef WANT_ELFINFO ++# error "MAKE ME IE64 CODE!" ++1: ld8 r9 = [out2], 8 /* load *envp and increment it */ ++ orr r9 = r9, r9 /* test for NULL */ ++ bne 1b ++ ++ adds r14 = 8, r14 /* __elfinfo = environ + 8 */ ++ st8 [r14] = out2 /* store envp in __elfinfo */ ++#endif ++ + #ifdef WANT_DYNAMIC + /* FIXME: dl_init parameter ??? */ + br.call.sptk.few rp = _dyn_start +diff --git a/include/sys/shm.h b/include/sys/shm.h +index 9b2d04d..70bb17e 100644 +--- a/include/sys/shm.h ++++ b/include/sys/shm.h +@@ -60,15 +60,6 @@ struct shm_info { + unsigned long swap_successes; + }; + +-#if defined(__i386__) || defined(__mips__) || defined(__arm__) || defined(__powerpc__) || defined (__powerpc64__) || defined(__s390__) || defined(__hppa__) || defined(__x86_64__) || defined(__ia64__) +-#define PAGE_SIZE 4096UL +-#define PAGE_SHIFT 12 +-#elif defined(__alpha__) || defined(__sparc__) +-/* sun4* has 4k except sun4 architecture, sparc64 has 8k */ +-#define PAGE_SIZE 8192UL +-#define PAGE_SHIFT 13 +-#endif +- + extern int shmget(key_t key, int size, int shmflg) __THROW; + extern void *shmat(int shmid, const void *shmaddr, int shmflg) __THROW; + extern int shmdt (const void *shmaddr) __THROW; +diff --git a/lib/alloc.c b/lib/alloc.c +index 9690565..3f0cedb 100644 +--- a/lib/alloc.c ++++ b/lib/alloc.c @@ -18,8 +18,7 @@ #include #include @@ -127,8 +379,253 @@ static size_t REGPARM(1) get_index(size_t _size) { register size_t idx=0; ---- dietlibc-0.31.20080409/ppc/start.S.pagesize -+++ dietlibc-0.31.20080409/ppc/start.S +diff --git a/lib/closedir.c b/lib/closedir.c +index 3aade81..21de234 100644 +--- a/lib/closedir.c ++++ b/lib/closedir.c +@@ -4,8 +4,10 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + int closedir (DIR* d) { + int res=close(d->fd); +- munmap (d, PAGE_SIZE); ++ munmap (d, __DIET_PAGE_SIZE); + return res; + } +diff --git a/lib/mmap64.c b/lib/mmap64.c +index 0ab29a6..5012394 100644 +--- a/lib/mmap64.c ++++ b/lib/mmap64.c +@@ -4,16 +4,18 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + #ifdef __NR_mmap2 + void*__mmap2(void*start,size_t length,int prot,int flags,int fd,off_t pgoffset); + + void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset); + void*__libc_mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) { +- if (offset&(PAGE_SIZE-1)) { ++ if (offset&(__DIET_PAGE_SIZE)) { + errno=-EINVAL; + return MAP_FAILED; + } +- return __mmap2(addr,len,prot,flags,fd,offset>>PAGE_SHIFT); ++ return __mmap2(addr,len,prot,flags,fd,offset>>__DIET_PAGE_SHIFT); + } + + void*mmap64(void*addr,size_t len,int prot,int flags,int fd,off64_t offset) +diff --git a/lib/opendir.c b/lib/opendir.c +index 2530d1a..0b49638 100644 +--- a/lib/opendir.c ++++ b/lib/opendir.c +@@ -5,6 +5,8 @@ + #include + #include + ++#include "../dietpagesize.h" ++ + DIR* opendir ( const char* name ) { + int fd = open (name, O_RDONLY | O_DIRECTORY); + DIR* t = NULL; +@@ -12,7 +14,7 @@ DIR* opendir ( const char* name ) { + if ( fd >= 0 ) { + if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) + goto lose; +- t = (DIR *) mmap (NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, ++ t = (DIR *) mmap (NULL, __DIET_PAGE_SIZE, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (t == MAP_FAILED) + lose: +diff --git a/lib/readdir.c b/lib/readdir.c +index ed885a5..d80a406 100644 +--- a/lib/readdir.c ++++ b/lib/readdir.c +@@ -5,7 +5,7 @@ + + struct dirent* readdir(DIR *d) { + if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents(d->fd,(struct dirent*)d->buf,sizeof (d->buf)-1); ++ int res=getdents(d->fd,(struct dirent*)d->buf,__DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +diff --git a/lib/readdir64.c b/lib/readdir64.c +index 924f0a8..06d073b 100644 +--- a/lib/readdir64.c ++++ b/lib/readdir64.c +@@ -14,7 +14,7 @@ + #ifndef WANT_LARGEFILE_BACKCOMPAT + struct dirent64* readdir64(DIR *d) { + if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents64(d->fd,(struct dirent64*)d->buf, sizeof (d->buf)-1); ++ int res=getdents64(d->fd,(struct dirent64*)d->buf, __DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +@@ -32,7 +32,7 @@ again: + if (!trygetdents64) { + #endif + if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents(d->fd,(struct dirent*)d->buf, sizeof (d->buf)-1); ++ int res=getdents(d->fd,(struct dirent*)d->buf, __DIRSTREAM_BUF_SIZE-1); + if (res<=0) return 0; + d->num=res; d->cur=0; + } +@@ -46,7 +46,7 @@ again: + #ifdef __NR_getdents64 + } + if (!d->num || (d->cur += ((struct dirent64*)(d->buf+d->cur))->d_reclen)>=d->num) { +- int res=getdents64(d->fd,(struct dirent64*)d->buf,sizeof (d->buf)); ++ int res=getdents64(d->fd,(struct dirent64*)d->buf,__DIRSTREAM_BUF_SIZE); + if (res<=0) { + if (errno==ENOSYS) { + trygetdents64=0; +diff --git a/libcruft/__get_elf_aux_value.c b/libcruft/__get_elf_aux_value.c +new file mode 100644 +index 0000000..6ddddb4 +--- /dev/null ++++ b/libcruft/__get_elf_aux_value.c +@@ -0,0 +1,14 @@ ++#include ++#include "../dietelfinfo.h" ++ ++__diet_elf_addr_t *__get_elf_aux_value(unsigned int tag) ++{ ++ extern __diet_elf_addr_t const * const __elfinfo; ++ __diet_elf_addr_t *aux_ptr; ++ ++ for (aux_ptr = __elfinfo; aux_ptr[0]!=AT_NULL; aux_ptr += 2) ++ if (aux_ptr[0]==tag) ++ return aux_ptr+1; ++ ++ return NULL; ++} +diff --git a/libcruft/getpagesize.c b/libcruft/getpagesize.c +index 536d3dc..80f476b 100644 +--- a/libcruft/getpagesize.c ++++ b/libcruft/getpagesize.c +@@ -2,14 +2,22 @@ + #include + #include + +-#ifndef PAGE_SIZE +-#define PAGE_SIZE 4096 +-#endif ++#include "../dietelfinfo.h" ++#include "../dietpagesize.h" + +-size_t __libc_getpagesize(void); + size_t __libc_getpagesize(void) { +- return PAGE_SIZE; ++#ifdef WANT_DYN_PAGESIZE ++ static size_t pgsz; ++ ++ if (__unlikely(pgsz==0)) { ++ __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); ++ pgsz = *v; /* causes segfault when 'v==NULL' */ ++ } ++ ++ return pgsz; ++#else ++ return __DIET_PAGE_SIZE_PREDEF; ++#endif + } + + size_t getpagesize(void) __attribute__((weak,alias("__libc_getpagesize"))); +- +diff --git a/libcruft/sysconf.c b/libcruft/sysconf.c +index e9c15cb..b98195c 100644 +--- a/libcruft/sysconf.c ++++ b/libcruft/sysconf.c +@@ -3,6 +3,9 @@ + #include + #include + ++#include "dietelfinfo.h" ++#include "dietpagesize.h" ++ + extern int __sc_nr_cpus(); + + long sysconf(int name) +@@ -16,6 +19,14 @@ long sysconf(int name) + return limit.rlim_cur; + } + case _SC_CLK_TCK: ++#ifdef WANT_ELFINFO ++ { ++ __diet_elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); ++ if (v) ++ return *v; ++ } ++#endif ++ + #ifdef __alpha__ + return 1024; + #else +@@ -23,11 +34,7 @@ long sysconf(int name) + #endif + + case _SC_PAGESIZE: +-#if ( defined(__alpha__) || defined(__sparc__) ) +- return 8192; +-#else +- return 4096; +-#endif ++ return __libc_getpagesize(); + + case _SC_ARG_MAX: + return ARG_MAX; +diff --git a/mips/start.S b/mips/start.S +index 57144b3..002fcf8 100644 +--- a/mips/start.S ++++ b/mips/start.S +@@ -47,6 +47,15 @@ __start: + #endif + add $a2, $a2, $a1 + sw $a2, environ ++#ifdef WANT_ELFINFO ++# error "MAKE ME MIPS CODE!" ++1: addu $a2, $a2, 4 /* increment envp */ ++ lw $4, -4($a2) /* load envp[-1]; TODO: is $4 a proper ++ temporary register? */ ++ bnz 1b /* ... until envp[-1]==NULL ++ TODO: use proper 'bnz' operation */ ++ sw $a2, __elfinfo ++#endif + jalr $25 + la $25, exit + move $4,$2 +diff --git a/parisc/start.S b/parisc/start.S +index 69d9cce..0f064be 100644 +--- a/parisc/start.S ++++ b/parisc/start.S +@@ -34,6 +34,16 @@ _start: + ldil LP%environ, %r19 + ldo RP%environ(%r19), %r19 + ++#ifdef WANT_ELFINFO ++# error "MAKE ME PARISC CODE!" ++1: add %r20, %r19, %r19 ; envp += 4 ++ ldw -4(0,%r19), %r21 ; load envp[-4] into %r21 ++ comibf =,0, 0,%21,1b ; compare %21 with 0 without nullification ++ ++ ldil LP%__elfinfo, %r19 ++ ldo RP%__elfinfo(%r19), %r19 ++#endif ++ + /* Expand the stack to store the 5th through 7th args */ + ldo 64(%sp), %sp + +diff --git a/ppc/start.S b/ppc/start.S +index 771f1ad..eb62efb 100644 +--- a/ppc/start.S ++++ b/ppc/start.S @@ -31,6 +31,15 @@ _start: lis 14,environ@ha stw 5,environ@l(14) @@ -145,37 +642,179 @@ #ifdef WANT_DYNAMIC mr 6,7 bl _dyn_start ---- dietlibc-0.31.20080409/dietfeatures.h.pagesize -+++ dietlibc-0.31.20080409/dietfeatures.h -@@ -126,6 +126,16 @@ - /* #define WANT_SSP_XOR */ +diff --git a/ppc64/start.S b/ppc64/start.S +index a9208ff..46b4bf0 100644 +--- a/ppc64/start.S ++++ b/ppc64/start.S +@@ -58,6 +58,15 @@ _start: + oris 14,14,environ@ha + std 5,environ@l(14) - -+/* Some platforms like x86_64, ppc* or mips do not have a fixed PAGE_SIZE. -+ * Select WANT_DYN_PAGESIZE to detect the current PAGE_SIZE at runtime. Else, -+ * define WANT_STATIC_PAGESIZE to a proper value (must be a power of 2) -+ * matching the configured pagesize of the kernel where your binaries are -+ * running on. -+ * -+ * Selecting WANT_DYN_PAGESIZE enlarges the startup code by around 1-3 -+ * instructions and might add an additional __elfinfo symbol */ -+#define WANT_DYN_PAGESIZE -+/* #define WANT_STATIC_PAGESIZE 0x10000UL */ - - - /* stop uncommenting here ;-) */ -@@ -157,4 +167,8 @@ - #endif - #endif - -+#ifdef WANT_DYN_PAGESIZE -+#define WANT_ELFINFO ++#ifdef WANT_ELFINFO ++1: ldu 15,0(5) ++ addi 5, 5, 8 ++ cmpdi 15,0 ++ bne 1b ++ ++ std 5,__elfinfo@l(14) +#endif + + #ifdef WANT_DYNAMIC + /* #warning dynamic */ + mr 6,7 +diff --git a/s390/start.S b/s390/start.S +index c0f971f..d071564 100644 +--- a/s390/start.S ++++ b/s390/start.S +@@ -30,6 +30,17 @@ _start: + l %r1,8(%r13) + st %r4,0(%r1) + ++#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: ahi %r4, 4 # increment envp ++ l %r12, -4(0,%r4) # load envp[-1] into %r12 ++ or %r12, %r12 # test %r12 for NULL ++ brc 1, 1b ++ ++ ahi %r1, 4 ++ st %r4,0(%r1) ++#endif ++ + /* call main or _dyn_start */ + l %r1,0(%r13) + basr %r14,%r1 +diff --git a/s390x/start.S b/s390x/start.S +index 25895a6..db71fc9 100644 +--- a/s390x/start.S ++++ b/s390x/start.S +@@ -26,6 +26,17 @@ _start: + larl %r13,environ + stg %r4,0(%r13) + ++#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: aghi %r4, 8 # increment envp ++ lg %r12, -8(0,%r4) # load envp[-1] into %r12 ++ ogr %r12, %r12 # test %r12 for NULL ++ brc 1, 1b ++ ++ aghi %r13, 8 ++ stg %r4,0(%r13) ++#endif ++ + /* call main or _dyn_start */ + #ifdef WANT_DYNAMIC + brasl %r14,_dyn_start +diff --git a/sparc/shmat.c b/sparc/shmat.c +index b7dce2e..ce3bfcb 100644 +--- a/sparc/shmat.c ++++ b/sparc/shmat.c +@@ -3,17 +3,15 @@ + #include + #include + +-extern void* __ipc(); ++#include "../dietpagesize.h" + +-#ifndef PAGE_SIZE +-#define PAGE_SIZE 4096 +-#endif ++extern void* __ipc(); + + void* shmat(int shmid,const void* shmaddr,int shmflg) { + void* raddr; + register void* result; + result=__ipc(SHMAT,shmid,shmflg,&raddr,shmaddr); +- if ((unsigned long)result <= -(unsigned long)PAGE_SIZE) ++ if ((unsigned long)result <= -(unsigned long)__DIET_PAGE_SIZE) + result=raddr; + return result; + } +diff --git a/sparc/start.S b/sparc/start.S +index a7841e3..6037eae 100644 +--- a/sparc/start.S ++++ b/sparc/start.S +@@ -25,6 +25,17 @@ _start: + or %o3, %lo(environ), %o3 + st %o2, [%o3] + ++#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: add %o2, %o2, 4 ++ ld [%o2-4], %o4 ++ orcc %o4, %o4, %o4 ++ bne 1b ++ ++ add %o3, %o3, 4 ++ st %o2, [%o3] ++#endif ++ + /* When starting a binary via the dynamic linker, %g1 contains the + address of the shared library termination function, which will be + registered with atexit(). If we are statically linked, this will +diff --git a/sparc64/start.S b/sparc64/start.S +index a79c4e7..f0e7d82 100644 +--- a/sparc64/start.S ++++ b/sparc64/start.S +@@ -25,6 +25,17 @@ _start: + or %o3, %lo(environ), %o3 + stx %o2, [%o3] + ++#ifdef WANT_ELFINFO ++# error "VERIFY ME!" ++1: add %o2, %o2, 8 ++ ldx [%o2-8], %o4 ++ orcc %o4, %o4, %o4 ++ bne 1b ++ ++ add %o3, %o3, 8 ++ stx %o2, [%o3] ++#endif ++ + /* When starting a binary via the dynamic linker, %g1 contains the + address of the shared library termination function, which will be + registered with atexit(). If we are statically linked, this will +diff --git a/syscalls.s/environ.S b/syscalls.s/environ.S +index a4dd95e..78a17de 100644 +--- a/syscalls.s/environ.S ++++ b/syscalls.s/environ.S +@@ -1,6 +1,7 @@ + .section ".bss" + .align 8 + #include ++#include + + .type environ,object + .weak environ +@@ -15,3 +16,22 @@ environ: #endif ---- dietlibc-0.31.20080409/test/Makefile.pagesize -+++ dietlibc-0.31.20080409/test/Makefile -@@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_name + .size environ,.-environ + .size __environ,.-__environ ++ ++/* __elfinfo will be a copy of __environ after startup. Later, it will be ++ updated by __get_elf_aux_value() to point to the terminating NULL of the ++ environment. ++ ++ Startup code assumes that __elfinfo is located immediately after ++ __environ. */ ++ ++#ifdef WANT_ELFINFO ++.type __elfinfo,object ++.weak __elfinfo ++__elfinfo: ++#if __WORDSIZE == 64 ++ .quad 0 ++#else ++ .long 0 ++#endif ++.size __elfinfo,.-__elfinfo ++#endif +diff --git a/test/Makefile b/test/Makefile +index eea0075..ff416cf 100644 +--- a/test/Makefile ++++ b/test/Makefile +@@ -14,7 +14,7 @@ glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testhar memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ @@ -184,8 +823,23 @@ test: $(TESTPROGRAMS) +diff --git a/test/runtests.sh b/test/runtests.sh +index 6d89efb..908caa5 100644 +--- a/test/runtests.sh ++++ b/test/runtests.sh +@@ -1,6 +1,6 @@ + SUBDIRS="dirent inet stdio string stdlib time" + +-TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" ++TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" + + STDIN="read1" + PASS="getpass" +diff --git a/test/sysconf.c b/test/sysconf.c +new file mode 100644 +index 0000000..32263a5 --- /dev/null -+++ dietlibc-0.31.20080409/test/sysconf.c ++++ b/test/sysconf.c @@ -0,0 +1,80 @@ +#include +#include @@ -267,432 +921,10 @@ + + return err; +} ---- dietlibc-0.31.20080409/test/runtests.sh.pagesize -+++ dietlibc-0.31.20080409/test/runtests.sh -@@ -1,6 +1,6 @@ - SUBDIRS="dirent inet stdio string stdlib time" - --TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysenter ungetc waitpid" -+TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" - - STDIN="read1" - PASS="getpass" ---- dietlibc-0.31.20080409/sparc64/start.S.pagesize -+++ dietlibc-0.31.20080409/sparc64/start.S -@@ -25,6 +25,17 @@ _start: - or %o3, %lo(environ), %o3 - stx %o2, [%o3] - -+#ifdef WANT_ELFINFO -+# error "VERIFY ME!" -+1: add %o2, %o2, 8 -+ ldx [%o2-8], %o4 -+ orcc %o4, %o4, %o4 -+ bne 1b -+ -+ add %o3, %o3, 8 -+ stx %o2, [%o3] -+#endif -+ - /* When starting a binary via the dynamic linker, %g1 contains the - address of the shared library termination function, which will be - registered with atexit(). If we are statically linked, this will ---- dietlibc-0.31.20080409/libcruft/sysconf.c.pagesize -+++ dietlibc-0.31.20080409/libcruft/sysconf.c -@@ -3,6 +3,9 @@ - #include - #include - -+#include "dietelfinfo.h" -+#include "dietpagesize.h" -+ - extern int __sc_nr_cpus(); - - long sysconf(int name) -@@ -16,6 +19,14 @@ long sysconf(int name) - return limit.rlim_cur; - } - case _SC_CLK_TCK: -+#ifdef WANT_ELFINFO -+ { -+ __diet_elf_addr_t *v = __get_elf_aux_value(AT_CLKTCK); -+ if (v) -+ return *v; -+ } -+#endif -+ - #ifdef __alpha__ - return 1024; - #else -@@ -23,11 +34,7 @@ long sysconf(int name) - #endif - - case _SC_PAGESIZE: --#if ( defined(__alpha__) || defined(__sparc__) ) -- return 8192; --#else -- return 4096; --#endif -+ return __libc_getpagesize(); - - case _SC_ARG_MAX: - return ARG_MAX; ---- /dev/null -+++ dietlibc-0.31.20080409/libcruft/__get_elf_aux_value.c -@@ -0,0 +1,14 @@ -+#include -+#include "../dietelfinfo.h" -+ -+__diet_elf_addr_t *__get_elf_aux_value(unsigned int tag) -+{ -+ extern __diet_elf_addr_t const * const __elfinfo; -+ __diet_elf_addr_t *aux_ptr; -+ -+ for (aux_ptr = __elfinfo; aux_ptr[0]!=AT_NULL; aux_ptr += 2) -+ if (aux_ptr[0]==tag) -+ return aux_ptr+1; -+ -+ return NULL; -+} ---- dietlibc-0.31.20080409/libcruft/getpagesize.c.pagesize -+++ dietlibc-0.31.20080409/libcruft/getpagesize.c -@@ -2,14 +2,22 @@ - #include - #include - --#ifndef PAGE_SIZE --#define PAGE_SIZE 4096 --#endif -+#include "../dietelfinfo.h" -+#include "../dietpagesize.h" - --size_t __libc_getpagesize(void); - size_t __libc_getpagesize(void) { -- return PAGE_SIZE; -+#ifdef WANT_DYN_PAGESIZE -+ static size_t pgsz; -+ -+ if (__unlikely(pgsz==0)) { -+ __diet_elf_addr_t *v = __get_elf_aux_value(AT_PAGESZ); -+ pgsz = *v; /* causes segfault when 'v==NULL' */ -+ } -+ -+ return pgsz; -+#else -+ return __DIET_PAGE_SIZE_PREDEF; -+#endif - } - - size_t getpagesize(void) __attribute__((weak,alias("__libc_getpagesize"))); -- ---- /dev/null -+++ dietlibc-0.31.20080409/dietpagesize.h -@@ -0,0 +1,31 @@ -+#ifndef H_DIETLIBC_DIETPAGESIZE_H -+#define H_DIETLIBC_DIETPAGESIZE_H -+ -+#include -+#include "dietfeatures.h" -+ -+extern size_t __libc_getpagesize(void) __attribute__((__const__)) __pure; -+ -+#if defined(WANT_STATIC_PAGESIZE) -+# define __DIET_PAGE_SIZE_PREDEF (WANT_STATIC_PAGESIZE) -+# define __DIET_PAGE_SHIFT_PREDEF (ffs(__DIET_PAGE_SIZE_PREDEF)-1) -+#elif defined(__alpha__) || defined(__sparc__) -+# define __DIET_PAGE_SIZE_PREDEF (8192UL) -+# define __DIET_PAGE_SHIFT_PREDEF (13) -+#elif defined(__powerpc64__) -+# define __DIET_PAGE_SIZE_PREDEF (65536UL) -+# define __DIET_PAGE_SHIFT_PREDEF (16) -+#else -+# define __DIET_PAGE_SIZE_PREDEF (4096UL) -+# define __DIET_PAGE_SHIFT_PREDEF (12) -+#endif -+ -+#ifdef WANT_DYN_PAGESIZE -+# define __DIET_PAGE_SIZE (__libc_getpagesize()) -+# define __DIET_PAGE_SHIFT (ffs(__DIET_PAGE_SIZE)-1) -+#else -+# define __DIET_PAGE_SIZE __DIET_PAGE_SIZE_PREDEF -+# define __DIET_PAGE_SHIFT __DIET_PAGE_SHIFT_PREDEF -+#endif -+ -+#endif /* H_DIETLIBC_DIETPAGESIZE_H */ ---- dietlibc-0.31.20080409/s390x/start.S.pagesize -+++ dietlibc-0.31.20080409/s390x/start.S -@@ -26,6 +26,17 @@ _start: - larl %r13,environ - stg %r4,0(%r13) - -+#ifdef WANT_ELFINFO -+# error "VERIFY ME!" -+1: aghi %r4, 8 # increment envp -+ lg %r12, -8(0,%r4) # load envp[-1] into %r12 -+ ogr %r12, %r12 # test %r12 for NULL -+ brc 1, 1b -+ -+ aghi %r13, 8 -+ stg %r4,0(%r13) -+#endif -+ - /* call main or _dyn_start */ - #ifdef WANT_DYNAMIC - brasl %r14,_dyn_start ---- /dev/null -+++ dietlibc-0.31.20080409/dietelfinfo.h -@@ -0,0 +1,20 @@ -+#include "dietfeatures.h" -+ -+#ifdef WANT_ELFINFO -+#include -+#include -+#include -+ -+/* TODO: exported interface from has been changed in 2.6.25 so -+ * the 'elf_addr_t' type is not available anymore. Hence, derive it from -+ * __WORDSIZE__. */ -+ -+#if __WORDSIZE == 64 -+typedef uint64_t __diet_elf_addr_t; -+#elif __WORDSIZE == 32 -+typedef uint32_t __diet_elf_addr_t; -+#endif -+ -+__diet_elf_addr_t * __get_elf_aux_value(unsigned int tag) -+ __attribute__((__visibility__("hidden"),__const__)) __pure; -+#endif ---- dietlibc-0.31.20080409/ia64/start.S.pagesize -+++ dietlibc-0.31.20080409/ia64/start.S -@@ -40,6 +40,16 @@ _start: - ;; - st8 [r14] = out2 /* store envp in environ */ - -+#ifdef WANT_ELFINFO -+# error "MAKE ME IE64 CODE!" -+1: ld8 r9 = [out2], 8 /* load *envp and increment it */ -+ orr r9 = r9, r9 /* test for NULL */ -+ bne 1b -+ -+ adds r14 = 8, r14 /* __elfinfo = environ + 8 */ -+ st8 [r14] = out2 /* store envp in __elfinfo */ -+#endif -+ - #ifdef WANT_DYNAMIC - /* FIXME: dl_init parameter ??? */ - br.call.sptk.few rp = _dyn_start ---- dietlibc-0.31.20080409/i386/start.S.pagesize -+++ dietlibc-0.31.20080409/i386/start.S -@@ -25,6 +25,13 @@ _start: - PIC_INIT /* non-PIC: this is an empty line */ - PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */ - -+#ifdef WANT_ELFINFO -+1: add $4, %eax /* increment envp */ -+ cmpl $0, -4(%eax) /* load envp[-1] */ -+ jne 1b /* ... until envp[-1]==NULL */ -+ PUT_VAR %eax, __elfinfo, %ecx -+#endif -+ - #ifdef PROFILING - pushl $_etext - pushl $.text ---- dietlibc-0.31.20080409/dietdirent.h.pagesize -+++ dietlibc-0.31.20080409/dietdirent.h -@@ -1,8 +1,12 @@ - #include - -+#include "dietpagesize.h" -+ - struct __dirstream { - int fd; -- char buf[PAGE_SIZE-(sizeof (int)*3)]; - unsigned int num; - unsigned int cur; -+ char buf[]; - }; /* stream data from opendir() */ -+ -+#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf)) ---- dietlibc-0.31.20080409/alpha/start.S.pagesize -+++ dietlibc-0.31.20080409/alpha/start.S -@@ -24,6 +24,15 @@ _start: - - stq $18, environ - -+#ifdef WANT_ELFINFO -+# error "MAKE ME alpha ASSEMBLER!" -+1: ldq $19, $18 ; load *envp into $19 -+ addq $18, 1, $18 ; increment *envp -+ orr $19, $19, $19 -+ jne 1b -+ stq $18, __elfinfo -+#endif -+ - #ifdef WANT_DYNAMIC - /* in v0 ($0) is the ld.so _fini pointer */ - mov $0, $19 /* mov v0(dynload) to a3 */ ---- dietlibc-0.31.20080409/syscalls.s/environ.S.pagesize -+++ dietlibc-0.31.20080409/syscalls.s/environ.S -@@ -1,6 +1,7 @@ - .section ".bss" - .align 8 - #include -+#include - - .type environ,object - .weak environ -@@ -15,3 +16,22 @@ environ: - #endif - .size environ,.-environ - .size __environ,.-__environ -+ -+/* __elfinfo will be a copy of __environ after startup. Later, it will be -+ updated by __get_elf_aux_value() to point to the terminating NULL of the -+ environment. -+ -+ Startup code assumes that __elfinfo is located immediately after -+ __environ. */ -+ -+#ifdef WANT_ELFINFO -+.type __elfinfo,object -+.weak __elfinfo -+__elfinfo: -+#if __WORDSIZE == 64 -+ .quad 0 -+#else -+ .long 0 -+#endif -+.size __elfinfo,.-__elfinfo -+#endif ---- dietlibc-0.31.20080409/arm/start.S.pagesize -+++ dietlibc-0.31.20080409/arm/start.S -@@ -23,11 +23,18 @@ _start: - #ifdef __DYN_LIB - ldr sl, .L4 - 1: add sl, pc, sl -- str a3, [sl, ip] @ environ = envp -+ str a3, [ip, sl]! @ environ = envp; ip = GOT(environ) - #else - str a3, [ip, #0] @ environ = envp - #endif - -+#ifdef WANT_ELFINFO -+1: ldr r5, [a3], #4 @ load *envp and increment it -+ orr r5, r5, r5 @ read value==0? -+ bne 1b -+ str a3, [ip, #4] @ __elfinfo = envp -+#endif -+ - #ifdef PROFILING - stmdb sp!, { r0 - r3 } - ldr r0, .L5 -@@ -70,6 +77,3 @@ _exit: - .L5: .word .text - .L6: .word _etext - #endif -- -- -- ---- dietlibc-0.31.20080409/parisc/start.S.pagesize -+++ dietlibc-0.31.20080409/parisc/start.S -@@ -34,6 +34,16 @@ _start: - ldil LP%environ, %r19 - ldo RP%environ(%r19), %r19 - -+#ifdef WANT_ELFINFO -+# error "MAKE ME PARISC CODE!" -+1: add %r20, %r19, %r19 ; envp += 4 -+ ldw -4(0,%r19), %r21 ; load envp[-4] into %r21 -+ comibf =,0, 0,%21,1b ; compare %21 with 0 without nullification -+ -+ ldil LP%__elfinfo, %r19 -+ ldo RP%__elfinfo(%r19), %r19 -+#endif -+ - /* Expand the stack to store the 5th through 7th args */ - ldo 64(%sp), %sp - ---- dietlibc-0.31.20080409/include/sys/shm.h.pagesize -+++ dietlibc-0.31.20080409/include/sys/shm.h -@@ -60,15 +60,6 @@ struct shm_info { - unsigned long swap_successes; - }; - --#if defined(__i386__) || defined(__mips__) || defined(__arm__) || defined(__powerpc__) || defined (__powerpc64__) || defined(__s390__) || defined(__hppa__) || defined(__x86_64__) || defined(__ia64__) --#define PAGE_SIZE 4096UL --#define PAGE_SHIFT 12 --#elif defined(__alpha__) || defined(__sparc__) --/* sun4* has 4k except sun4 architecture, sparc64 has 8k */ --#define PAGE_SIZE 8192UL --#define PAGE_SHIFT 13 --#endif -- - extern int shmget(key_t key, int size, int shmflg) __THROW; - extern void *shmat(int shmid, const void *shmaddr, int shmflg) __THROW; - extern int shmdt (const void *shmaddr) __THROW; ---- dietlibc-0.31.20080409/sparc/start.S.pagesize -+++ dietlibc-0.31.20080409/sparc/start.S -@@ -25,6 +25,17 @@ _start: - or %o3, %lo(environ), %o3 - st %o2, [%o3] - -+#ifdef WANT_ELFINFO -+# error "VERIFY ME!" -+1: add %o2, %o2, 4 -+ ld [%o2-4], %o4 -+ orcc %o4, %o4, %o4 -+ bne 1b -+ -+ add %o3, %o3, 4 -+ st %o2, [%o3] -+#endif -+ - /* When starting a binary via the dynamic linker, %g1 contains the - address of the shared library termination function, which will be - registered with atexit(). If we are statically linked, this will ---- dietlibc-0.31.20080409/sparc/shmat.c.pagesize -+++ dietlibc-0.31.20080409/sparc/shmat.c -@@ -3,17 +3,15 @@ - #include - #include - --extern void* __ipc(); -+#include "../dietpagesize.h" - --#ifndef PAGE_SIZE --#define PAGE_SIZE 4096 --#endif -+extern void* __ipc(); - - void* shmat(int shmid,const void* shmaddr,int shmflg) { - void* raddr; - register void* result; - result=__ipc(SHMAT,shmid,shmflg,&raddr,shmaddr); -- if ((unsigned long)result <= -(unsigned long)PAGE_SIZE) -+ if ((unsigned long)result <= -(unsigned long)__DIET_PAGE_SIZE) - result=raddr; - return result; - } ---- dietlibc-0.31.20080409/ppc64/start.S.pagesize -+++ dietlibc-0.31.20080409/ppc64/start.S -@@ -58,6 +58,15 @@ _start: - oris 14,14,environ@ha - std 5,environ@l(14) - -+#ifdef WANT_ELFINFO -+1: ldu 15,0(5) -+ addi 5, 5, 8 -+ cmpdi 15,0 -+ bne 1b -+ -+ std 5,__elfinfo@l(14) -+#endif -+ - #ifdef WANT_DYNAMIC - /* #warning dynamic */ - mr 6,7 ---- dietlibc-0.31.20080409/x86_64/start.S.pagesize -+++ dietlibc-0.31.20080409/x86_64/start.S +diff --git a/x86_64/start.S b/x86_64/start.S +index adc461a..3915e33 100644 +--- a/x86_64/start.S ++++ b/x86_64/start.S @@ -12,12 +12,28 @@ _start: leaq 8(%rsi,%rdi,8),%rdx /* %rdx = envp = (8*rdi)+%rsi+8 */ @@ -722,59 +954,6 @@ #ifdef PROFILING pushq %rdi /* save reg args */ ---- dietlibc-0.31.20080409/s390/start.S.pagesize -+++ dietlibc-0.31.20080409/s390/start.S -@@ -30,6 +30,17 @@ _start: - l %r1,8(%r13) - st %r4,0(%r1) - -+#ifdef WANT_ELFINFO -+# error "VERIFY ME!" -+1: ahi %r4, 4 # increment envp -+ l %r12, -4(0,%r4) # load envp[-1] into %r12 -+ or %r12, %r12 # test %r12 for NULL -+ brc 1, 1b -+ -+ ahi %r1, 4 -+ st %r4,0(%r1) -+#endif -+ - /* call main or _dyn_start */ - l %r1,0(%r13) - basr %r14,%r1 ---- dietlibc-0.31.20080409/dynlinker/ldso_start.S.pagesize -+++ dietlibc-0.31.20080409/dynlinker/ldso_start.S -@@ -86,6 +86,15 @@ __environ: - .long 0 - #endif - -+/* __elfinfo must follow __environ immediately */ -+.global __elfinfo -+__elfinfo: -+#if __WORDSIZE == 64 -+ .quad 0 -+#else -+ .long 0 -+#endif -+ - .global fini_entry - fini_entry: - .long 0 ---- dietlibc-0.31.20080409/mips/start.S.pagesize -+++ dietlibc-0.31.20080409/mips/start.S -@@ -47,6 +47,15 @@ __start: - #endif - add $a2, $a2, $a1 - sw $a2, environ -+#ifdef WANT_ELFINFO -+# error "MAKE ME MIPS CODE!" -+1: addu $a2, $a2, 4 /* increment envp */ -+ lw $4, -4($a2) /* load envp[-1]; TODO: is $4 a proper -+ temporary register? */ -+ bnz 1b /* ... until envp[-1]==NULL -+ TODO: use proper 'bnz' operation */ -+ sw $a2, __elfinfo -+#endif - jalr $25 - la $25, exit - move $4,$2 +-- +1.5.4.5 + diff --git a/dietlibc-0.31-printFG.patch b/dietlibc-0.31-printFG.patch index 5da6b17..797cf7a 100644 --- a/dietlibc-0.31-printFG.patch +++ b/dietlibc-0.31-printFG.patch @@ -1,6 +1,58 @@ -diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/lib/__dtostr.c ---- dietlibc-0.31.20080409/lib/__dtostr.c.printFG 2006-07-04 05:33:02.000000000 +0200 -+++ dietlibc-0.31.20080409/lib/__dtostr.c 2008-04-14 00:36:10.000000000 +0200 +From 313a9b41133ca631890de99f979ee01074d0c0be Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:39:23 +0200 +Subject: [PATCH] Fixes/enhancements for INF/NAN handling in printf() + +This patch adds support for uppercase 'F' and 'G' printf format +specifiers. It fixes handling of -INF values in __dtostr() too; +previously, there was + +| unsigned int i; +| if ((i=isinf(d))) return copystring(buf,maxlen,i>0?"inf":"-inf"); + ~~~ +which evaluated to true everytime. The copystring() function +worked for 3-letter words only but not for '-inf'. + +The last argument of __dtostr() was changed from a boolean flag to +a bitmask. Bit 0 encodes 'g' or 'f', and bit 1 lower-/uppercase. +There should be probably added some macros for them; for now, +these values are used directly. + +Please note that this might affect other applications (liblowfat?) +too which are using __dtostr(). + +'isinf(3)' is a builtin with gcc 4.3 and does not give a hint +about the signess of the infinity anymore. Hence, this patch uses +a more portable way where needed. +--- + include/stdlib.h | 6 ++++- + lib/__dtostr.c | 18 +++++++++++----- + lib/__v_printf.c | 59 +++++++++++++++++++++++++++++------------------------ + test/printf.c | 44 +++++++++++++++++++++++++++++++++++---- + 4 files changed, 88 insertions(+), 39 deletions(-) + +diff --git a/include/stdlib.h b/include/stdlib.h +index d1e1569..34f3a7f 100644 +--- a/include/stdlib.h ++++ b/include/stdlib.h +@@ -28,8 +28,12 @@ long double strtold(const char *nptr, char **endptr) __THROW; + long int strtol(const char *nptr, char **endptr, int base) __THROW; + unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; + ++/* HACK: used flags in __dtostr ++ 0x01 ... 'g' ++ 0x02 ... uppercase ++ Define some constants somewhere... */ + extern int __ltostr(char *s, unsigned int size, unsigned long i, unsigned int base, int UpCase) __THROW; +-extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int g) __THROW; ++extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int flags) __THROW; + + #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L + __extension__ long long int strtoll(const char *nptr, char **endptr, int base) __THROW; +diff --git a/lib/__dtostr.c b/lib/__dtostr.c +index 1d082e3..bc61200 100644 +--- a/lib/__dtostr.c ++++ b/lib/__dtostr.c @@ -5,13 +5,15 @@ static int copystring(char* buf,int maxlen, const char* s) { @@ -20,7 +72,7 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li #if 1 union { unsigned long long l; -@@ -35,8 +37,12 @@ int __dtostr(double d,char *buf,unsigned +@@ -35,8 +37,12 @@ int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned i double tmp; char *oldbuf=buf; @@ -35,7 +87,7 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li e10=1+(long)(e*0.30102999566398119802); /* log10(2) */ /* Wir iterieren von Links bis wir bei 0 sind oder maxlen erreicht * ist. Wenn maxlen erreicht ist, machen wir das nochmal in -@@ -126,7 +132,7 @@ int __dtostr(double d,char *buf,unsigned +@@ -126,7 +132,7 @@ int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned i if (prec2 || prec>(unsigned int)(buf-oldbuf)+1) { /* more digits wanted */ if (!maxlen) return 0; --maxlen; *buf='.'; ++buf; @@ -44,9 +96,10 @@ diff -up dietlibc-0.31.20080409/lib/__dtostr.c.printFG dietlibc-0.31.20080409/li if (prec2) prec=prec2; prec-=buf-oldbuf-1; } else { -diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/lib/__v_printf.c ---- dietlibc-0.31.20080409/lib/__v_printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/lib/__v_printf.c 2008-04-14 00:36:10.000000000 +0200 +diff --git a/lib/__v_printf.c b/lib/__v_printf.c +index 36202f5..964c005 100644 +--- a/lib/__v_printf.c ++++ b/lib/__v_printf.c @@ -4,6 +4,7 @@ #include #include @@ -72,8 +125,7 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ if (flag_sign || d < +0.0) flag_in_sign=1; - sz=__dtostr(d,s,sizeof(buf)-1,width,preci,g); -+ sz=__dtostr(d,s,sizeof(buf)-1,width,preci,flags); - +- - if (flag_dot) { - char *tmp; - if ((tmp=strchr(s,'.'))) { @@ -83,6 +135,8 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ - } else if (flag_hash) { - s[sz]='.'; - s[++sz]='\0'; ++ sz=__dtostr(d,s,sizeof(buf)-1,width,preci,flags); ++ + if (!isnan(d) && !isinf(d)) { /* skip NaN + INF values */ + if (flag_dot) { + char *tmp; @@ -131,9 +185,10 @@ diff -up dietlibc-0.31.20080409/lib/__v_printf.c.printFG dietlibc-0.31.20080409/ } sz=strlen(s); -diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/test/printf.c ---- dietlibc-0.31.20080409/test/printf.c.printFG 2008-02-19 01:28:13.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printf.c 2008-04-14 00:36:10.000000000 +0200 +diff --git a/test/printf.c b/test/printf.c +index 719461a..ef6050d 100644 +--- a/test/printf.c ++++ b/test/printf.c @@ -2,11 +2,26 @@ #include #include @@ -215,20 +270,6 @@ diff -up dietlibc-0.31.20080409/test/printf.c.printFG dietlibc-0.31.20080409/tes + return EXIT_SUCCESS; } -diff -up dietlibc-0.31.20080409/include/stdlib.h.printFG dietlibc-0.31.20080409/include/stdlib.h ---- dietlibc-0.31.20080409/include/stdlib.h.printFG 2007-09-20 20:51:18.000000000 +0200 -+++ dietlibc-0.31.20080409/include/stdlib.h 2008-04-14 00:36:10.000000000 +0200 -@@ -28,8 +28,12 @@ long double strtold(const char *nptr, ch - long int strtol(const char *nptr, char **endptr, int base) __THROW; - unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW; - -+/* HACK: used flags in __dtostr -+ 0x01 ... 'g' -+ 0x02 ... uppercase -+ Define some constants somewhere... */ - extern int __ltostr(char *s, unsigned int size, unsigned long i, unsigned int base, int UpCase) __THROW; --extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int g) __THROW; -+extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2,int flags) __THROW; - - #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L - __extension__ long long int strtoll(const char *nptr, char **endptr, int base) __THROW; +-- +1.5.4.5 + diff --git a/dietlibc-0.31-stacksmash-dyn.patch b/dietlibc-0.31-stacksmash-dyn.patch index 1f6d81c..9090deb 100644 --- a/dietlibc-0.31-stacksmash-dyn.patch +++ b/dietlibc-0.31-stacksmash-dyn.patch @@ -1,6 +1,18 @@ -diff -up dietlibc-0.31/lib/stack_smash_handler2.c.~1~ dietlibc-0.31/lib/stack_smash_handler2.c ---- dietlibc-0.31/lib/stack_smash_handler2.c.~1~ 2007-09-01 14:13:21.000000000 +0200 -+++ dietlibc-0.31/lib/stack_smash_handler2.c 2007-09-01 14:13:40.000000000 +0200 +From 4bd1b2d53138ab594a6b73c938daf1b7c2195367 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:57:09 +0200 +Subject: [PATCH] __stack_chk_fail_local function + +Added __stack_chk_fail_local() function as an alias for __stack_chk_fail(). +This is required for dynamic linking. +--- + lib/stack_smash_handler2.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/lib/stack_smash_handler2.c b/lib/stack_smash_handler2.c +index ecefeb8..b03c0d5 100644 +--- a/lib/stack_smash_handler2.c ++++ b/lib/stack_smash_handler2.c @@ -2,6 +2,7 @@ #include @@ -9,3 +21,6 @@ diff -up dietlibc-0.31/lib/stack_smash_handler2.c.~1~ dietlibc-0.31/lib/stack_sm /* earlier versions of ProPolice actually gave the address and function * name as arguments to the handler, so it could print some useful +-- +1.5.4.5 + diff --git a/dietlibc-0.31-stacksmash.patch b/dietlibc-0.31-stacksmash.patch index 8044193..a47ddc8 100644 --- a/dietlibc-0.31-stacksmash.patch +++ b/dietlibc-0.31-stacksmash.patch @@ -1,14 +1,39 @@ -2007-09-01 Enrico Scholz - * lib/stack_smash_handler2: modified __stack_chk_fail() to trigger - a segfault by accessing address 0x0. Every system with an MMU - known by me, segfaults by dereferencing a NULL pointer +From 9fb58ca3604cb1426e94689fab57ab5c127c8c55 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:56:07 +0200 +Subject: [PATCH] Enhanced __stack_chk_fail - * Makefile: added hack to compile stack_smash_handler2 with - '--fno-omit-frame-pointer'. +* modified __stack_chk_fail() to trigger a segfault by accessing + address 0x0. Every system with an MMU known by me, segfaults + by dereferencing a NULL pointer. -diff -up dietlibc-0.31/lib/stack_smash_handler2.c.~1~ dietlibc-0.31/lib/stack_smash_handler2.c ---- dietlibc-0.31/lib/stack_smash_handler2.c.stacksmash -+++ dietlibc-0.31/lib/stack_smash_handler2.c +* added hack to compile stack_smash_handler2 with + '--fno-omit-frame-pointer'. +--- + Makefile | 3 ++- + lib/stack_smash_handler2.c | 10 +++++++++- + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index adc2779..0cd0105 100644 +--- a/Makefile ++++ b/Makefile +@@ -172,9 +172,10 @@ $(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h + $(OBJDIR)/pthread_%.o: libpthread/pthread_%.c + $(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ + $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@ ++$(OBJDIR)/stack_smash_handler2.o: XCFLAGS:=-fno-omit-frame-pointer + + $(OBJDIR)/%.o: %.c +- $(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ -D__dietlibc__ ++ $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ -D__dietlibc__ + $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@ + endif + +diff --git a/lib/stack_smash_handler2.c b/lib/stack_smash_handler2.c +index 9e85099..ecefeb8 100644 +--- a/lib/stack_smash_handler2.c ++++ b/lib/stack_smash_handler2.c @@ -8,5 +8,13 @@ void __stack_chk_fail(void); * diagnostics. No more. :-( */ void __stack_chk_fail(void) { @@ -24,17 +49,6 @@ diff -up dietlibc-0.31/lib/stack_smash_handler2.c.~1~ dietlibc-0.31/lib/stack_sm + while (1) + *(char *)0 = 0; } ---- dietlibc-0.31/Makefile.stacksmash -+++ dietlibc-0.31/Makefile -@@ -172,9 +172,10 @@ $(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h - $(OBJDIR)/pthread_%.o: libpthread/pthread_%.c - $(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ - $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@ -+$(OBJDIR)/stack_smash_handler2.o: XCFLAGS:=-fno-omit-frame-pointer - - $(OBJDIR)/%.o: %.c -- $(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ -D__dietlibc__ -+ $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ -D__dietlibc__ - $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@ - endif - +-- +1.5.4.5 + diff --git a/dietlibc-0.31-stat64.patch b/dietlibc-0.31-stat64.patch deleted file mode 100644 index d043d84..0000000 --- a/dietlibc-0.31-stat64.patch +++ /dev/null @@ -1,88 +0,0 @@ -diff -up dietlibc-0.31.20080409/test/stdio/tst-fseek.c.stat64 dietlibc-0.31.20080409/test/stdio/tst-fseek.c ---- dietlibc-0.31.20080409/test/stdio/tst-fseek.c.stat64 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdio/tst-fseek.c 2008-04-12 21:17:47.000000000 +0200 -@@ -19,6 +19,7 @@ - 02111-1307 USA. */ - - #define _GNU_SOURCE -+#define _FILE_OFFSET_BITS 64 - #include - #include - #include -@@ -38,8 +39,8 @@ main (void) - const char outstr[] = "hello world!\n"; - char strbuf[sizeof outstr]; - char buf[200]; -- struct stat64 st1; -- struct stat64 st2; -+ struct stat st1; -+ struct stat st2; - int result = 0; - - tmpdir = getenv ("TMPDIR"); -@@ -315,9 +316,9 @@ main (void) - } - - /* Check the access time. */ -- if (fstat64 (fd, &st1) < 0) -+ if (fstat (fd, &st1) < 0) - { -- printf ("%d: fstat64() before fseeko() failed\n\n", __LINE__); -+ printf ("%d: fstat() before fseeko() failed\n\n", __LINE__); - result = 1; - } - else -@@ -338,9 +339,9 @@ main (void) - sleep (1); - t = time (NULL); - -- if (fstat64 (fd, &st2) < 0) -+ if (fstat (fd, &st2) < 0) - { -- printf ("%d: fstat64() after fseeko() failed\n\n", __LINE__); -+ printf ("%d: fstat() after fseeko() failed\n\n", __LINE__); - result = 1; - } - if (st1.st_ctime >= t) -@@ -424,9 +425,9 @@ main (void) - printf ("%d: fopen() failed\n\n", __LINE__); - result = 1; - } -- else if (fstat64 (fileno (fp), &st1) < 0) -+ else if (fstat (fileno (fp), &st1) < 0) - { -- printf ("%d: fstat64() before fseeko() failed\n\n", __LINE__); -+ printf ("%d: fstat() before fseeko() failed\n\n", __LINE__); - result = 1; - } - else if (fseeko (fp, 0, SEEK_END) != 0) -@@ -436,7 +437,7 @@ main (void) - } - else if (ftello (fp) != st1.st_size) - { -- printf ("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, -+ printf ("%d: fstat st_size %zd ftello %zd\n", __LINE__, - (size_t) st1.st_size, (size_t) ftello (fp)); - result = 1; - } -@@ -451,9 +452,9 @@ main (void) - printf ("%d: fopen() failed\n\n", __LINE__); - result = 1; - } -- else if (fstat64 (fileno (fp), &st1) < 0) -+ else if (fstat (fileno (fp), &st1) < 0) - { -- printf ("%d: fstat64() before fgetc() failed\n\n", __LINE__); -+ printf ("%d: fstat() before fgetc() failed\n\n", __LINE__); - result = 1; - } - else if (fgetc (fp) == EOF) -@@ -468,7 +469,7 @@ main (void) - } - else if (ftello (fp) != st1.st_size) - { -- printf ("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, -+ printf ("%d: fstat st_size %zd ftello %zd\n", __LINE__, - (size_t) st1.st_size, (size_t) ftello (fp)); - result = 1; - } diff --git a/dietlibc-0.31-testsuite.patch b/dietlibc-0.31-testsuite.patch index bd5f24d..eb4b86d 100644 --- a/dietlibc-0.31-testsuite.patch +++ b/dietlibc-0.31-testsuite.patch @@ -1,53 +1,101 @@ -diff -up dietlibc-0.31.20080409/test/getmntent.c.testsuite dietlibc-0.31.20080409/test/getmntent.c ---- dietlibc-0.31.20080409/test/getmntent.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/getmntent.c 2008-04-14 00:41:17.000000000 +0200 -@@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { +From ca5319e550e6e64e803a46fbb80d9436d8348567 Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:41:23 +0200 +Subject: [PATCH] Several testsuite fixes/enhancments + +* test/getmntent.c: I removed the checks which called endmntent() + multiple times resp. with a NULL pointer. Behavior in first + case is undefined and latter causes a segfault (I could not + find documentation that this is allowed). Hence, it does not + make sense to test this. + +* test/stdlib/tst-malloc.c: test 'malloc(0)' only, when + WANT_MALLOC_ZERO is set + +* test/time/tst-strftime.c: the '%Zu' printf format specifier is + bogus (from libc5 ages). I replaced it with the '%zu' one. + + Please note, that this test still fails because it uses glibc + specific features. + +* test/time/tst-strptime.c: removed tests which set a non-C + locale. Broken usage of 'strptime()' result was fixed too. + This test should succeed now. + +* test/math.c: this test was added while working on the '%F/%G' + patch and verifies the isinf() + isnan() functions. + +* fixes lot of broken printf() format specifiers + +* fixes tests using isinf(); the math.c test checks the dietlibc + implementation of isinf() (which differs between positive and + negative inf). All other tests use boolean retval only and test + for the signess of the values +--- + test/Makefile | 2 +- + test/asprintf.c | 2 +- + test/bsearch.c | 2 +- + test/byteswap.c | 8 ++++---- + test/cycles.c | 2 +- + test/getmntent.c | 6 +----- + test/math.c | 29 +++++++++++++++++++++++++++++ + test/mktime.c | 6 +++--- + test/printftest.c | 6 +++--- + test/rand48.c | 12 ++++++------ + test/runtests.sh | 2 +- + test/speed.c | 4 ++-- + test/stdio/tstscanf.c | 4 ++-- + test/stdlib/tst-malloc.c | 6 +++++- + test/stdlib/tst-strtod.c | 4 ++-- + test/sysenter.c | 6 +++--- + test/time/tst-strftime.c | 6 +++--- + test/time/tst-strptime.c | 23 ++++++++++++++++++++--- + 18 files changed, 88 insertions(+), 42 deletions(-) + create mode 100644 test/math.c + +diff --git a/test/Makefile b/test/Makefile +index ff416cf..537b32f 100644 +--- a/test/Makefile ++++ b/test/Makefile +@@ -10,7 +10,7 @@ LCOMPAT=-lcompat + TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ + fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ + gethostbyname_r getmntent getopt getpass getpwnam getservbyname getservbyport getusershell \ +-glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ ++glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness \ + memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ + protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ + speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ +diff --git a/test/asprintf.c b/test/asprintf.c +index 996a5aa..0d4f2eb 100644 +--- a/test/asprintf.c ++++ b/test/asprintf.c +@@ -13,7 +13,7 @@ int main(int argc, char **argv) { + assert(strlen(path) == asprintlen); + + printf("%s\n", path); +- asprintlen=asprintf(&path, "/proc" "/%d/stat", strlen(argv[1])); ++ asprintlen=asprintf(&path, "/proc" "/%zu/stat", strlen(argv[1])); + assert(strlen(path) == asprintlen); + printf("%s\n", path); - printf("closing /etc/fstab\n"); - assert ( 1 == endmntent(fstab)); -- printf("closing /etc/fstab again\n"); -- assert ( 1 == endmntent(fstab)); /* endmntent must always return 1 */ -- printf("entmntent(0)\n"); -- assert ( 1 == endmntent(0)); /* causes a segfault with diet libc */ -+ - return 0; - } -- -diff -up dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite dietlibc-0.31.20080409/test/stdio/tst-fphex.c ---- dietlibc-0.31.20080409/test/stdio/tst-fphex.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdio/tst-fphex.c 2008-04-14 00:41:17.000000000 +0200 -@@ -37,7 +37,7 @@ int main (int argc, char **argv) { - int n = snprintf (buf, sizeof buf, t->fmt, t->value); - if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0) - { -- printf ("%s\tExpected \"%s\" (%u)\n\tGot \"%s\" (%d, %u)\n", -+ printf ("%s\tExpected \"%s\" (%zu)\n\tGot \"%s\" (%d, %zu)\n", - t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf)); - result = 1; - } -diff -up dietlibc-0.31.20080409/test/stdio/tstscanf.c.testsuite dietlibc-0.31.20080409/test/stdio/tstscanf.c ---- dietlibc-0.31.20080409/test/stdio/tstscanf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdio/tstscanf.c 2008-04-14 00:47:36.000000000 +0200 -@@ -338,14 +338,14 @@ main (int argc, char **argv) - int res; - - res = sscanf ("-InF", "%f", &value); -- if (res != 1 || isinf (value) != -1) -+ if (res != 1 || !isinf (value) || !(value<0)) - { - fputs ("test failed!\n", stdout); - result = 1; +diff --git a/test/bsearch.c b/test/bsearch.c +index 961ad35..ede4c88 100644 +--- a/test/bsearch.c ++++ b/test/bsearch.c +@@ -35,7 +35,7 @@ int main() { + die("bsearch returned NULL\n"); } - - res = sscanf ("+InfiNiTY", "%f", &value); -- if (res != 1 || isinf (value) != 1) -+ if (res != 1 || !isinf (value) || !(value>0)) - { - fputs ("test failed!\n", stdout); - result = 1; -diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409/test/byteswap.c ---- dietlibc-0.31.20080409/test/byteswap.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/byteswap.c 2008-04-14 00:41:17.000000000 +0200 + if (k != array+i) die("bsearch found wrong element\n"); +- printf("%d\n",k-array); ++ printf("%ld\n",k-array); + } + } + return 0; +diff --git a/test/byteswap.c b/test/byteswap.c +index 19239dd..6f43c25 100644 +--- a/test/byteswap.c ++++ b/test/byteswap.c @@ -9,12 +9,12 @@ int main() { snprintf(buf,100,"%x %x", bswap_16(0x1234), bswap_16(0x5678)); assert(strcmp(buf, "3412 7856") == 0); @@ -65,20 +113,10 @@ diff -up dietlibc-0.31.20080409/test/byteswap.c.testsuite dietlibc-0.31.20080409 assert(strcmp(buf, "efcdab8967452301") == 0); return 0; } -diff -up dietlibc-0.31.20080409/test/runtests.sh.testsuite dietlibc-0.31.20080409/test/runtests.sh ---- dietlibc-0.31.20080409/test/runtests.sh.testsuite 2008-04-14 00:41:17.000000000 +0200 -+++ dietlibc-0.31.20080409/test/runtests.sh 2008-04-14 00:41:17.000000000 +0200 -@@ -1,6 +1,6 @@ - SUBDIRS="dirent inet stdio string stdlib time" - --TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" -+TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" - - STDIN="read1" - PASS="getpass" -diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/test/cycles.c ---- dietlibc-0.31.20080409/test/cycles.c.testsuite 2004-08-24 12:10:48.000000000 +0200 -+++ dietlibc-0.31.20080409/test/cycles.c 2008-04-14 00:41:17.000000000 +0200 +diff --git a/test/cycles.c b/test/cycles.c +index 35547f8..a4cb8c8 100644 +--- a/test/cycles.c ++++ b/test/cycles.c @@ -24,7 +24,7 @@ int main(int argc,char* argv[]) { if (!fork()) { execve(argv[1],argv+1,environ); exit(1); } wait(0); @@ -88,51 +126,84 @@ diff -up dietlibc-0.31.20080409/test/cycles.c.testsuite dietlibc-0.31.20080409/t return 0; } -diff -up dietlibc-0.31.20080409/test/sysenter.c.testsuite dietlibc-0.31.20080409/test/sysenter.c ---- dietlibc-0.31.20080409/test/sysenter.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/sysenter.c 2008-04-14 00:41:17.000000000 +0200 -@@ -11,11 +11,11 @@ int main() { - int i; - for (i=0; environ[i]; ++i) ; - for (x=(struct elf_aux*)(environ+i+1); x->type; ++x) { -- printf("%d %x\n",x->type,x->value); -+ printf("%ld %lx\n",x->type,x->value); - if (x->type==AT_PAGESZ) -- printf("pagesize %d\n",x->value); -+ printf("pagesize %ld\n",x->value); - else if (x->type==AT_SYSINFO) -- printf("vsyscall %p\n",x->value); -+ printf("vsyscall %p\n",(void *)x->value); - } +diff --git a/test/getmntent.c b/test/getmntent.c +index fc17a83..1039d06 100644 +--- a/test/getmntent.c ++++ b/test/getmntent.c +@@ -33,10 +33,6 @@ while ((e = getmntent(fstab))) { + + printf("closing /etc/fstab\n"); + assert ( 1 == endmntent(fstab)); +- printf("closing /etc/fstab again\n"); +- assert ( 1 == endmntent(fstab)); /* endmntent must always return 1 */ +- printf("entmntent(0)\n"); +- assert ( 1 == endmntent(0)); /* causes a segfault with diet libc */ ++ + return 0; + } +- +diff --git a/test/math.c b/test/math.c +new file mode 100644 +index 0000000..687103c +--- /dev/null ++++ b/test/math.c +@@ -0,0 +1,29 @@ ++#include ++#include ++#include ++ ++int main() ++{ ++ extern int __isinf(double d); ++ extern int __isnan(double d); ++ ++#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) ++ assert(__isinf(__builtin_inff()) == +1); ++ assert(__isinf(-__builtin_inff()) == -1); ++ ++ assert(__isinf(__builtin_inf()) == +1); ++ assert(__isinf(-__builtin_inf()) == -1); ++ ++ assert(__isnan(__builtin_nan(""))); ++#endif ++ ++ assert(__isinf((DBL_MAX * DBL_MAX)) == +1); ++ assert(__isinf(-(DBL_MAX * DBL_MAX)) == -1); ++ ++ assert(isinf((DBL_MAX * DBL_MAX))); ++ assert(isinf(-(DBL_MAX * DBL_MAX))); ++ ++ //assert(isnan(nan(""))); ++ ++ return 0; ++} +diff --git a/test/mktime.c b/test/mktime.c +index 5e9e65c..9b4bd5e 100644 +--- a/test/mktime.c ++++ b/test/mktime.c +@@ -9,15 +9,15 @@ int main() { + t.tm_mday=29; + t.tm_mon=2; + t.tm_year=100; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); + t.tm_mday=1; + t.tm_mon=3; + t.tm_year=102; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); + t.tm_mday=1; + t.tm_mon=6; + t.tm_year=102; +- printf("%d\n",mktime(&t)); ++ printf("%ld\n",(long)mktime(&t)); return 0; } -diff -up dietlibc-0.31.20080409/test/Makefile.testsuite dietlibc-0.31.20080409/test/Makefile ---- dietlibc-0.31.20080409/test/Makefile.testsuite 2008-04-14 00:41:17.000000000 +0200 -+++ dietlibc-0.31.20080409/test/Makefile 2008-04-14 00:41:17.000000000 +0200 -@@ -10,7 +10,7 @@ LCOMPAT=-lcompat - TESTPROGRAMS=adjtime argv asprintf atexit bsearch byteswap calloc confstr cycles empty flush fnmatch \ - fputc ftw fwrite getaddrinfo getenv getgrnam gethostbyaddr gethostbyname \ - gethostbyname_r getmntent getopt getpass getpwnam getservbyname getservbyport getusershell \ --glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness \ -+glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness \ - memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest \ - protoent prototypes putenv pwent rand48 read1 readdir regex select sendfile servent siglist \ - speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr \ -diff -up dietlibc-0.31.20080409/test/bsearch.c.testsuite dietlibc-0.31.20080409/test/bsearch.c ---- dietlibc-0.31.20080409/test/bsearch.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/bsearch.c 2008-04-14 00:41:17.000000000 +0200 -@@ -35,7 +35,7 @@ int main() { - die("bsearch returned NULL\n"); - } - if (k != array+i) die("bsearch found wrong element\n"); -- printf("%d\n",k-array); -+ printf("%ld\n",k-array); - } - } - return 0; -diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.20080409/test/printftest.c ---- dietlibc-0.31.20080409/test/printftest.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/printftest.c 2008-04-14 00:41:17.000000000 +0200 + +diff --git a/test/printftest.c b/test/printftest.c +index 4743279..47d9580 100644 +--- a/test/printftest.c ++++ b/test/printftest.c @@ -101,8 +101,8 @@ int main() printf("#%i#\n",18); printf("#%d#\n",18); @@ -153,9 +224,87 @@ diff -up dietlibc-0.31.20080409/test/printftest.c.testsuite dietlibc-0.31.200804 printf ("snprintf (\"%%.999999u\", 10) == %d\n", snprintf(buf2, sizeof(buf2), "%.999999u", 10)); -diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-malloc.c ---- dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-malloc.c 2008-04-14 00:41:17.000000000 +0200 +diff --git a/test/rand48.c b/test/rand48.c +index 4f5b08f..1e67632 100644 +--- a/test/rand48.c ++++ b/test/rand48.c +@@ -6,16 +6,16 @@ main (void) + { + static unsigned short data[7] = { 1, 2, 3, 4, 5, 6, 7 }; + +- printf ("one %X\n", mrand48 ()); +- printf ("two %X\n", mrand48 ()); +- printf ("three %X\n", mrand48 ()); ++ printf ("one %lX\n", mrand48 ()); ++ printf ("two %lX\n", mrand48 ()); ++ printf ("three %lX\n", mrand48 ()); + + lcong48 (data); + printf ("after lcong48:\n"); + +- printf ("one %X\n", mrand48 ()); +- printf ("two %X\n", mrand48 ()); +- printf ("three %X\n", mrand48 ()); ++ printf ("one %lX\n", mrand48 ()); ++ printf ("two %lX\n", mrand48 ()); ++ printf ("three %lX\n", mrand48 ()); + + return 0; + } +diff --git a/test/runtests.sh b/test/runtests.sh +index 908caa5..fcd3202 100644 +--- a/test/runtests.sh ++++ b/test/runtests.sh +@@ -1,6 +1,6 @@ + SUBDIRS="dirent inet stdio string stdlib time" + +-TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" ++TESTPROGRAMS="adjtime argv atexit bsearch byteswap calloc confstr empty flush fputc ffs fnmatch ftw fwrite getaddrinfo getenv getdelim getgrnam gethostbyaddr gethostbyname gethostbyname_r getmntent getopt getpwnam getservbyname getservbyport getusershell glob grent hasmntopt hello iconv if_nameindex ltostr malloc-debugger math md5_testharness memccpy memchr memcmp memrchr memusage mktime mmap_test pipe printf printftest protoent prototypes putenv pwent rand48 readdir regex select sendfile servent siglist speed spent sprintf sscanf stdarg strcasecmp strcmp strncat strncpy strptime strrchr strstr strtol sysconf sysenter ungetc waitpid" + + STDIN="read1" + PASS="getpass" +diff --git a/test/speed.c b/test/speed.c +index 674b9a8..22249a7 100644 +--- a/test/speed.c ++++ b/test/speed.c +@@ -7,10 +7,10 @@ int main() { + int i; + time_t t; + +- printf("%d\n", time(0)); ++ printf("%ld\n", (long)time(0)); + for (i=0; i<10000000; ++i) + t=time(0); + +- printf("%d\n", time(0)); ++ printf("%ld\n", (long)time(0)); + return 0; + } +diff --git a/test/stdio/tstscanf.c b/test/stdio/tstscanf.c +index 44ddf49..0f55c3c 100644 +--- a/test/stdio/tstscanf.c ++++ b/test/stdio/tstscanf.c +@@ -338,14 +338,14 @@ main (int argc, char **argv) + int res; + + res = sscanf ("-InF", "%f", &value); +- if (res != 1 || isinf (value) != -1) ++ if (res != 1 || !isinf (value) || !(value<0)) + { + fputs ("test failed!\n", stdout); + result = 1; + } + + res = sscanf ("+InfiNiTY", "%f", &value); +- if (res != 1 || isinf (value) != 1) ++ if (res != 1 || !isinf (value) || !(value>0)) + { + fputs ("test failed!\n", stdout); + result = 1; +diff --git a/test/stdlib/tst-malloc.c b/test/stdlib/tst-malloc.c +index 09fbb1f..4a491d9 100644 +--- a/test/stdlib/tst-malloc.c ++++ b/test/stdlib/tst-malloc.c @@ -21,13 +21,15 @@ #include #include @@ -185,9 +334,10 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-malloc.c.testsuite dietlibc-0.31 p = realloc (p, 0); if (p != NULL) -diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31.20080409/test/stdlib/tst-strtod.c ---- dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/stdlib/tst-strtod.c 2008-04-14 00:41:17.000000000 +0200 +diff --git a/test/stdlib/tst-strtod.c b/test/stdlib/tst-strtod.c +index 630a8fc..bacdca7 100644 +--- a/test/stdlib/tst-strtod.c ++++ b/test/stdlib/tst-strtod.c @@ -149,10 +149,10 @@ main (int argc, char ** argv) } @@ -201,35 +351,29 @@ diff -up dietlibc-0.31.20080409/test/stdlib/tst-strtod.c.testsuite dietlibc-0.31 status = 1; } -diff -up dietlibc-0.31.20080409/test/rand48.c.testsuite dietlibc-0.31.20080409/test/rand48.c ---- dietlibc-0.31.20080409/test/rand48.c.testsuite 2002-05-29 15:20:40.000000000 +0200 -+++ dietlibc-0.31.20080409/test/rand48.c 2008-04-14 00:41:17.000000000 +0200 -@@ -6,16 +6,16 @@ main (void) - { - static unsigned short data[7] = { 1, 2, 3, 4, 5, 6, 7 }; - -- printf ("one %X\n", mrand48 ()); -- printf ("two %X\n", mrand48 ()); -- printf ("three %X\n", mrand48 ()); -+ printf ("one %lX\n", mrand48 ()); -+ printf ("two %lX\n", mrand48 ()); -+ printf ("three %lX\n", mrand48 ()); - - lcong48 (data); - printf ("after lcong48:\n"); - -- printf ("one %X\n", mrand48 ()); -- printf ("two %X\n", mrand48 ()); -- printf ("three %X\n", mrand48 ()); -+ printf ("one %lX\n", mrand48 ()); -+ printf ("two %lX\n", mrand48 ()); -+ printf ("three %lX\n", mrand48 ()); - +diff --git a/test/sysenter.c b/test/sysenter.c +index a8fa3a8..3d85916 100644 +--- a/test/sysenter.c ++++ b/test/sysenter.c +@@ -11,11 +11,11 @@ int main() { + int i; + for (i=0; environ[i]; ++i) ; + for (x=(struct elf_aux*)(environ+i+1); x->type; ++x) { +- printf("%d %x\n",x->type,x->value); ++ printf("%ld %lx\n",x->type,x->value); + if (x->type==AT_PAGESZ) +- printf("pagesize %d\n",x->value); ++ printf("pagesize %ld\n",x->value); + else if (x->type==AT_SYSINFO) +- printf("vsyscall %p\n",x->value); ++ printf("vsyscall %p\n",(void *)x->value); + } return 0; } -diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strftime.c ---- dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strftime.c 2008-04-14 00:41:17.000000000 +0200 +diff --git a/test/time/tst-strftime.c b/test/time/tst-strftime.c +index e092e93..27db9a4 100644 +--- a/test/time/tst-strftime.c ++++ b/test/time/tst-strftime.c @@ -49,18 +49,18 @@ int main (void) { if (res == 0) @@ -252,9 +396,10 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strftime.c.testsuite dietlibc-0.31 free (buf); } -diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31.20080409/test/time/tst-strptime.c ---- dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/time/tst-strptime.c 2008-04-14 00:41:17.000000000 +0200 +diff --git a/test/time/tst-strptime.c b/test/time/tst-strptime.c +index 6277ea6..2773180 100644 +--- a/test/time/tst-strptime.c ++++ b/test/time/tst-strptime.c @@ -41,10 +41,12 @@ static const struct { "C", "03/03/00", "%D", 5, 62, 2, 3 }, { "C", "9/9/99", "%x", 4, 251, 8, 9 }, @@ -311,86 +456,6 @@ diff -up dietlibc-0.31.20080409/test/time/tst-strptime.c.testsuite dietlibc-0.31 { printf ("not all of `%s' read\n", day_tests[i].input); result = 1; -diff -up dietlibc-0.31.20080409/test/mktime.c.testsuite dietlibc-0.31.20080409/test/mktime.c ---- dietlibc-0.31.20080409/test/mktime.c.testsuite 2004-03-27 01:47:00.000000000 +0100 -+++ dietlibc-0.31.20080409/test/mktime.c 2008-04-14 00:41:17.000000000 +0200 -@@ -9,15 +9,15 @@ int main() { - t.tm_mday=29; - t.tm_mon=2; - t.tm_year=100; -- printf("%d\n",mktime(&t)); -+ printf("%ld\n",(long)mktime(&t)); - t.tm_mday=1; - t.tm_mon=3; - t.tm_year=102; -- printf("%d\n",mktime(&t)); -+ printf("%ld\n",(long)mktime(&t)); - t.tm_mday=1; - t.tm_mon=6; - t.tm_year=102; -- printf("%d\n",mktime(&t)); -+ printf("%ld\n",(long)mktime(&t)); - return 0; - } - -diff -up dietlibc-0.31.20080409/test/asprintf.c.testsuite dietlibc-0.31.20080409/test/asprintf.c ---- dietlibc-0.31.20080409/test/asprintf.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/asprintf.c 2008-04-14 00:41:17.000000000 +0200 -@@ -13,7 +13,7 @@ int main(int argc, char **argv) { - assert(strlen(path) == asprintlen); - - printf("%s\n", path); -- asprintlen=asprintf(&path, "/proc" "/%d/stat", strlen(argv[1])); -+ asprintlen=asprintf(&path, "/proc" "/%zu/stat", strlen(argv[1])); - assert(strlen(path) == asprintlen); - printf("%s\n", path); - -diff -up /dev/null dietlibc-0.31.20080409/test/math.c ---- /dev/null 2008-03-18 07:40:22.289057188 +0100 -+++ dietlibc-0.31.20080409/test/math.c 2008-04-14 00:46:45.000000000 +0200 -@@ -0,0 +1,29 @@ -+#include -+#include -+#include -+ -+int main() -+{ -+ extern int __isinf(double d); -+ extern int __isnan(double d); -+ -+#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) -+ assert(__isinf(__builtin_inff()) == +1); -+ assert(__isinf(-__builtin_inff()) == -1); -+ -+ assert(__isinf(__builtin_inf()) == +1); -+ assert(__isinf(-__builtin_inf()) == -1); -+ -+ assert(__isnan(__builtin_nan(""))); -+#endif -+ -+ assert(__isinf((DBL_MAX * DBL_MAX)) == +1); -+ assert(__isinf(-(DBL_MAX * DBL_MAX)) == -1); -+ -+ assert(isinf((DBL_MAX * DBL_MAX))); -+ assert(isinf(-(DBL_MAX * DBL_MAX))); -+ -+ //assert(isnan(nan(""))); -+ -+ return 0; -+} -diff -up dietlibc-0.31.20080409/test/speed.c.testsuite dietlibc-0.31.20080409/test/speed.c ---- dietlibc-0.31.20080409/test/speed.c.testsuite 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080409/test/speed.c 2008-04-14 00:41:17.000000000 +0200 -@@ -7,10 +7,10 @@ int main() { - int i; - time_t t; - -- printf("%d\n", time(0)); -+ printf("%ld\n", (long)time(0)); - for (i=0; i<10000000; ++i) - t=time(0); - -- printf("%d\n", time(0)); -+ printf("%ld\n", (long)time(0)); - return 0; - } +-- +1.5.4.5 + diff --git a/dietlibc-0.31.20080212-teststdout.patch b/dietlibc-0.31.20080212-teststdout.patch index 9d11ab4..7965ff8 100644 --- a/dietlibc-0.31.20080212-teststdout.patch +++ b/dietlibc-0.31.20080212-teststdout.patch @@ -1,6 +1,21 @@ -diff -up dietlibc-0.31.20080212/test/atexit.c.~1~ dietlibc-0.31.20080212/test/atexit.c ---- dietlibc-0.31.20080212/test/atexit.c.~1~ 2003-02-20 16:57:12.000000000 +0100 -+++ dietlibc-0.31.20080212/test/atexit.c 2008-02-13 18:34:12.000000000 +0100 +From b8de58754249c7f43c5959dc72c62e13851d45cb Mon Sep 17 00:00:00 2001 +From: Enrico Scholz +Date: Sat, 19 Apr 2008 17:45:11 +0200 +Subject: [PATCH] Use stdout instead of stderr in testsuite + +This patches uses stdout instead stderr when giving out normal status +messages in the testsuite. +--- + test/atexit.c | 2 +- + test/malloc-debugger.c | 2 +- + test/sendfile.c | 2 +- + test/waitpid.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/test/atexit.c b/test/atexit.c +index 709a3e4..79ee392 100644 +--- a/test/atexit.c ++++ b/test/atexit.c @@ -2,7 +2,7 @@ #include @@ -10,19 +25,10 @@ diff -up dietlibc-0.31.20080212/test/atexit.c.~1~ dietlibc-0.31.20080212/test/at } int main() { -diff -up dietlibc-0.31.20080212/test/sendfile.c.~1~ dietlibc-0.31.20080212/test/sendfile.c ---- dietlibc-0.31.20080212/test/sendfile.c.~1~ 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/sendfile.c 2008-02-13 18:35:34.000000000 +0100 -@@ -11,5 +11,5 @@ int main() { - - printf("sendfile returned %d\n",ret); - --return 0; -+ return ret<0 ? 1 : 0; - } -diff -up dietlibc-0.31.20080212/test/malloc-debugger.c.~1~ dietlibc-0.31.20080212/test/malloc-debugger.c ---- dietlibc-0.31.20080212/test/malloc-debugger.c.~1~ 2003-02-20 16:57:13.000000000 +0100 -+++ dietlibc-0.31.20080212/test/malloc-debugger.c 2008-02-13 18:34:27.000000000 +0100 +diff --git a/test/malloc-debugger.c b/test/malloc-debugger.c +index 040196e..058807e 100644 +--- a/test/malloc-debugger.c ++++ b/test/malloc-debugger.c @@ -4,7 +4,7 @@ int main() { char* c=malloc(13); @@ -32,9 +38,21 @@ diff -up dietlibc-0.31.20080212/test/malloc-debugger.c.~1~ dietlibc-0.31.2008021 c[0]=14; // c[15]=0; tmp=realloc(c,12345); -diff -up dietlibc-0.31.20080212/test/waitpid.c.~1~ dietlibc-0.31.20080212/test/waitpid.c ---- dietlibc-0.31.20080212/test/waitpid.c.~1~ 2003-12-15 14:07:42.000000000 +0100 -+++ dietlibc-0.31.20080212/test/waitpid.c 2008-02-13 18:35:57.000000000 +0100 +diff --git a/test/sendfile.c b/test/sendfile.c +index d43cdd2..28b3af5 100644 +--- a/test/sendfile.c ++++ b/test/sendfile.c +@@ -11,5 +11,5 @@ int main() { + + printf("sendfile returned %d\n",ret); + +-return 0; ++ return ret<0 ? 1 : 0; + } +diff --git a/test/waitpid.c b/test/waitpid.c +index fe2cb5b..92c0b0e 100644 +--- a/test/waitpid.c ++++ b/test/waitpid.c @@ -11,7 +11,7 @@ int main() { perror("fork"); _exit(1); @@ -44,3 +62,6 @@ diff -up dietlibc-0.31.20080212/test/waitpid.c.~1~ dietlibc-0.31.20080212/test/w sleep(1); _exit(23); } +-- +1.5.4.5 + From 8124dc480701b4d62238c718390ec839416fc71c Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:27:16 +0000 Subject: [PATCH 61/65] updated to 20080517 snapshot --- .cvsignore | 2 +- sources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.cvsignore b/.cvsignore index 842a349..85e3a5e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -dietlibc-0.31.20080409.tar.bz2 +dietlibc-0.31.20080517.tar.bz2 diff --git a/sources b/sources index b84c684..f50cb8d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -8ab045af7ad246c930c4e1b0fca1063c dietlibc-0.31.20080409.tar.bz2 +a3cd3a38ae545a3224aee9b17b50aa12 dietlibc-0.31.20080517.tar.bz2 From 456da1590b796a8a4495c6a0fb01620f05d66049 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 14:28:30 +0000 Subject: [PATCH 62/65] - updated to 20080517 snapshot - use patches from git repository --- dietlibc.spec | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dietlibc.spec b/dietlibc.spec index 6de0312..f75e44a 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -6,7 +6,7 @@ ## --with dynamic ... enable dynamic lib support -%global snapshot 20080409 +%global snapshot 20080517 %global pkglibdir %_prefix/lib/dietlibc %ifarch %ix86 x86_64 @@ -52,7 +52,6 @@ Patch33: dietlibc-0.31-stacksmash-dyn.patch Patch41: dietlibc-0.31.20080212-teststdout.patch Patch43: dietlibc-0.31-pagesize.patch Patch44: dietlibc-0.31-printFG.patch -Patch45: dietlibc-0.31-stat64.patch Patch46: dietlibc-0.31-testsuite.patch Patch47: dietlibc-0.31-lcctime.patch Patch48: dietlibc-0.31-implicitfunc.patch @@ -108,7 +107,6 @@ This package contains the dynamic libraries for dietlibc. %patch41 -p1 -b .teststdout %patch43 -p1 -b .pagesize %patch44 -p1 -b .printFG -%patch45 -p1 -b .stat64 %patch46 -p1 -b .testsuite %patch47 -p1 -b .lcctime %patch48 -p1 -b .implicitfunc @@ -201,6 +199,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Sun May 18 2008 Enrico Scholz - 0.31-5.20080517 +- updated to 20080517 snapshot +- use patches from git repository + * Sun May 18 2008 Enrico Scholz - 0.31-5.20080409 - fixed __signalfd() prototype From 6f14165bf81171abd5bcb3c3d3fce6610fad8783 Mon Sep 17 00:00:00 2001 From: ensc Date: Sat, 21 Jun 2008 15:17:28 +0000 Subject: [PATCH 63/65] removed CVS tags --- Makefile | 1 - dietlibc.spec | 2 -- 2 files changed, 3 deletions(-) diff --git a/Makefile b/Makefile index ad740a7..538d0ab 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ # Makefile for source rpm: dietlibc -# $Id: Makefile,v 1.1 2005/03/04 00:52:22 ensc Exp $ NAME := dietlibc SPECFILE = $(firstword $(wildcard *.spec)) diff --git a/dietlibc.spec b/dietlibc.spec index f75e44a..53afe17 100644 --- a/dietlibc.spec +++ b/dietlibc.spec @@ -1,5 +1,3 @@ -## $Id: dietlibc.spec,v 1.3 2005/02/01 12:03:17 ensc Exp $ - ## This package understands the following switches: ## --with[out] ssp ... enable/disable SSP; default depends ## on target architecture From 6ba2570d37679203acb74fe829778d3474c66a95 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 26 Nov 2009 01:22:24 +0000 Subject: [PATCH 64/65] Fix typo that causes a failure to update the common directory. (releng #2781) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 538d0ab..f485823 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ NAME := dietlibc SPECFILE = $(firstword $(wildcard *.spec)) define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done endef MAKEFILE_COMMON := $(shell $(find-makefile-common)) From 0d6cbfa8c4a26f5dc53750835a0493fab7acbd85 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 28 Jul 2010 12:57:45 +0000 Subject: [PATCH 65/65] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 29 ----------------------------- branch | 1 - 3 files changed, 30 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 branch diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index f485823..0000000 --- a/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# Makefile for source rpm: dietlibc -NAME := dietlibc -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) - - -CVS_BASEVER = 0.31 -CVS_DATE := $(shell date +'%Y%m%d' -d '-1 day') -_cvs_suffix = ${CVS_BASEVER}.${CVS_DATE} - -cvs-sources: - cd ${DESTDIR} . && cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 export -D${CVS_DATE} -d dietlibc-${_cvs_suffix} dietlibc - cd ${DESTDIR} . && tar cjf dietlibc-${_cvs_suffix}.tar.bz2 dietlibc-${_cvs_suffix} --owner root --group root diff --git a/branch b/branch deleted file mode 100644 index e9e7ccd..0000000 --- a/branch +++ /dev/null @@ -1 +0,0 @@ -F-8