From 28e616b2e9e21fbee5bac61de9aeb6371a8d6d8f Mon Sep 17 00:00:00 2001 From: Ralf Corsepius Date: Wed, 18 May 2011 13:52:06 +0000 Subject: New. --- .../patches/newlib-1.18.0-rtems4.10-20110518.diff | 2904 ++++++++++++++++++++ 1 file changed, 2904 insertions(+) create mode 100644 contrib/crossrpms/patches/newlib-1.18.0-rtems4.10-20110518.diff diff --git a/contrib/crossrpms/patches/newlib-1.18.0-rtems4.10-20110518.diff b/contrib/crossrpms/patches/newlib-1.18.0-rtems4.10-20110518.diff new file mode 100644 index 0000000000..ecced5fd7a --- /dev/null +++ b/contrib/crossrpms/patches/newlib-1.18.0-rtems4.10-20110518.diff @@ -0,0 +1,2904 @@ +diff -Naur newlib-1.18.0.orig/newlib/ChangeLog newlib-1.18.0-rtems4.10-20110518/newlib/ChangeLog +--- newlib-1.18.0.orig/newlib/ChangeLog 2009-12-17 22:08:04.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/ChangeLog 2011-05-18 14:27:09.025560232 +0200 +@@ -1,3 +1,39 @@ ++2011-05-18 Ralf Corsépius ++ ++ * libc/include/time.h: Add bugward-compatibile ++ CLOCK_THREAD_CPUTIME, CLOCK_PROCESS_CPUTIME. ++ ++2011-05-16 Yaakov Selkowitz ++ ++ * libc/include/time.h (CLOCK_PROCESS_CPUTIME_ID): Rename from ++ CLOCK_PROCESS_CPUTIME. ++ (CLOCK_THREAD_CPUTIME_ID): Rename from CLOCK_THREAD_CPUTIME. ++ ++2011-05-16 Christian Bruel ++ ++ * libc/stdlib/strtod.c (_strtod_r): Fix nf/nd counts to not exceed ++ DBL_DIG. ++ ++2011-04-19 Ralf Corsépius ++ ++ * libc/include/stdint.h: Rework SIZE_MAX. ++ * libc/sys/rtems/include/limits.h: Rework SSIZE_MAX. ++ ++2011-01-31 Ralf Corsépius ++ ++ * libc/sys/rtems/crt0.c: Add clock_gettime, gettimeofday, ++ sched_yield. ++ ++2011-01-12 Ralf Corsépius ++ ++ * libm/math/w_tgamma.c: Only build ifndef _DOUBLE_IS_32BITS. ++ * libm/math/wf_tgamma.c: Map tgamma to tgammaf, ifdef _DOUBLE_IS_32BITS. ++ ++2011-01-07 Ralf Corsépius ++ ++ * libc/sys/rtems/crt0.c: Adjust free() and calloc() to match their ++ public decls. ++ + 2009-12-17 Jeff Johnston + + * NEWS: Update with 1.18.0 info. +@@ -41,19 +77,19 @@ + * libc/stdlib/atexit.c: Ditto. + * libc/stdlib/on_exit.c: Ditto. + +-2009-12-17 Ralf Corsépius ++2009-12-17 Ralf Corsépius + + * libc/include/machine/ieeefp.h: Rework __IEEE_*_ENDIAN handling. +- * libc/machine/arm/machine/endian.h: Remove (Conflicts with ++ * libc/machine/arm/machine/endian.h: Remove (Conflicts with + libc/include/machine/endian.h) + +-2009-12-17 Ralf Corsépius ++2009-12-17 Ralf Corsépius + + * libc/include/machine/setjmp.h: Set up _JBLEN #ifdef __m68k__. + +-2009-12-17 Ralf Corsepius ++2009-12-17 Ralf Corsépius + +- * libc/include/pthread.h: Add pthread_atfork, pthread_rwlock_unlock ++ * libc/include/pthread.h: Add pthread_atfork, pthread_rwlock_unlock + * libc/include/sys/stat.h: Use struct timespec st_*tim, + blksize_t st_blksize, blkcnt_t st_blocks. + Add st_*time compatibility macros. +@@ -69,23 +105,23 @@ + and ETOOMANYREFS into general list as they are referenced + by OpenGroup and needed by RTEMS. + +-2009-12-16 Ralf Corsépius ++2009-12-16 Ralf Corsépius + + * libc/search/hcreate.c: Don't include (Unused). + +-2009-12-16 Ralf Corsépius ++2009-12-16 Ralf Corsépius + +- * libc/sys/rtems/machine/_types.h: New (Derived from ++ * libc/sys/rtems/machine/_types.h: New (Derived from + machine/_default_types.h). +- * libc/sys/rtems/crt0.c: Rework. Introduce macro RTEMS_STUB. ++ * libc/sys/rtems/crt0.c: Rework. Introduce macro RTEMS_STUB. + * libc/sys/rtems/sys/param.h: +- Update copyright notice from FreeBSD. +- Remove HZ. +- Add #include +- Remove priority handling (moved to sys/priority.h). +- Remove CLBYTES (Unused, abandoned in BSD). ++ Update copyright notice from FreeBSD. ++ Remove HZ. ++ Add #include ++ Remove priority handling (moved to sys/priority.h). ++ Remove CLBYTES (Unused, abandoned in BSD). + * libc/sys/rtems/sys/queue.h: Update copyright (from FreeBSD). +- Remove CIRCLEQ_*. ++ Remove CIRCLEQ_*. + + 2009-12-15 Conny Marco Menebrocker + +@@ -1666,7 +1702,7 @@ + + * libc/machine/arm/strcpy.c: Add missing comma. + +-2009-02-26 Ralf Corsepius ++2009-02-26 Ralf Corsépius + + * libc/machine/lm32/configure.in: Let + AC_CONFIG_SRCDIR point to setjmp.S instead of setjmp.s +@@ -1852,24 +1888,24 @@ + * libc/string/wcstrings.tex: Ditto. + * libc/string/Makefile.in: Regenerated. + +-2008-12-12 Ralf Corsepius ++2008-12-12 Ralf Corsépius + + * libc/stdio/fputws.c: Fix documentation. + * libc/stdio/getwchar.c: Ditto. + * libc/stdio/putwchar.c: Ditto. + +-2008-12-12 Ralf Corsepius ++2008-12-12 Ralf Corsépius + + * libc/include/sys/features.h: Set RTEMS's _POSIX_MONOTONIC_CLOCK to + 200112L (SUSv3 compliance). + Comment out RTEMS's _POSIX_SHARED_MEMORY_OBJECTS (Unsupported). + +-2008-12-12 Ralf Corsepius ++2008-12-12 Ralf Corsépius + + * libc/sys/rtems/crt0.c: Add stubs for getdents(), nanosleep(), + _execve(), _exit(). + +-2008-12-12 Ralf Corsepius ++2008-12-12 Ralf Corsépius + + * configure.host: Let *rtems* default to c99-formats. + +@@ -2019,7 +2055,7 @@ + . + * libc/sys/linux/io64.c: Add weak alias for _stat64. + +-2008-11-27 Ralf Corsepius ++2008-11-27 Ralf Corsépius + + * libc/posix/telldir.c: Use #if !defined() instead of #ifndef + to fix GCC warning. +@@ -2191,17 +2227,17 @@ + * libc/unix/collate.c (__collate_err): simplify to remove unnecessary + strdup() and strlen() calls, also getting rid of a compiler warning. + +-2008-11-19 Ralf Corsepius ++2008-11-19 Ralf Corsépius + + * libc/include/sys/config.h: Don't put + __ATTRIBUTE_IMPURE_PTR__ into .sdata section for mips-rtems. + +-2008-11-19 Ralf Corsepius ++2008-11-19 Ralf Corsépius + + * libc/posix/runetype.h: Add include of stddef.h and remove + defining standard types: size_t and wchar_t. + +-2008-11-19 Ralf Corsepius ++2008-11-19 Ralf Corsépius + + * libc/include/pthread.h: Remove prototypes for + pthread_attr_getcputime and pthread_attr_setcputime which +@@ -4256,7 +4292,7 @@ + * libc/machine/spu/sprintf.c: Ditto. + * libc/machine/spu/sscanf.c: Ditto. + +-2007-08-03 Ralf Corsepius ++2007-08-03 Ralf Corsépius + + * libc/include/tar.h: New. + +@@ -6241,7 +6277,7 @@ + * libc/include/sys/signal.h (sigdelset, sigfillset, sigismember): New macros. + (sigaddset, sigemptyset): Add return code. + +-2006-04-13 Ralf Corsepius ++2006-04-13 Ralf Corsépius + + * acinclude.m4: New _NEWLIB_VERSION. + * acinclude.m4(NEWLIB_CONFIGURE): AC_REQUIRE(_NEWLIB_VERSION). +@@ -6730,7 +6766,7 @@ + * libc/sys/linux/sys/stat.h: Change *stat64 prototypes to + take a pointer to struct stat64 rather than struct stat. + +-2005-12-16 Ralf Corsepius ++2005-12-16 Ralf Corsépius + + * libc/include/stdint.h: Prefer long over int for int32_t. + Use __have_long32 to set up int32_t. +@@ -6759,7 +6795,7 @@ + * libc/include/sys/types.h: Remove the ifdef armour around + standard POSIX types. + +-2005-12-06 Ralf Corsepius ++2005-12-06 Ralf Corsépius + + * libc/sys/rtems/crt0.c: Add rtems_gxx_key_create, + rtems_gxx_key_delete, rtems_gxx_getspecific, +@@ -6838,7 +6874,7 @@ + * libc/sys/linux/sys/unistd.h (readlink, symlink): New + prototypes. + +-2005-11-01 Ralf Corsepius ++2005-11-01 Ralf Corsépius + + * libc/include/stdint.h: Cleanup #if vs. #ifdef. + +@@ -7062,11 +7098,11 @@ + * libc/stdlib/mallocr.c (mALLOc, rEALLOCc, mEMALIGn): Set errno + to ENOMEM on failure. + +-2005-10-06 Ralf Corsepius ++2005-10-06 Ralf Corsépius + + * libc/include/stdint.h: Add [u]int_fast_t types. + +-2005-10-04 Ralf Corsepius ++2005-10-04 Ralf Corsépius + + * libc/include/stdint.h: Move magic to set __have_long* to the + beginning. Use #if __have* instead of #if defined(__have*). +@@ -7082,14 +7118,14 @@ + * libc/sys/linux/include/stdint.h: Include and + incorporate Ralf's change below. + +-2005-10-03 Ralf Corsepius ++2005-10-03 Ralf Corsépius + + * libc/include/stdint.h: + Use __INTMAX_TYPE__ to derive intmax_t. + Use __UINTMAX_TYPE__ to derive uintmax_t. + Fix minor typo. + +-2005-09-27 Ralf Corsepius ++2005-09-27 Ralf Corsépius + + * libc/include/stdint.h: Correct __STDINT_EXP macro incorrectly + handling GCC >= 4. +@@ -7425,16 +7461,16 @@ + * configure.host (newlib_cflags) : Add + -DCOMPACT_CTYPE. + +-2005-03-06 Ralf Corsepious ++2005-03-06 Ralf Corsépius + + * libc/sys/rtems/include/inttypes.h: New file. + * libc/sys/rtems/include/stdint.h: Ditto. + +-2005-03-06 Ralf Corsepious ++2005-03-06 Ralf Corsépius + + * libc/string/memcmp.c: Fix to avoid pointer signedness warning. + +-2005-03-06 Ralf Corsepious ++2005-03-06 Ralf Corsépius + + * libc/include/machine/_types.h: New file. + * libc/include/sys/types.h: Do not check for __rtems__ +@@ -7443,7 +7479,7 @@ + * libc/sys/rtems/machine/_types.h: Removed. Replaced with + shared header file. + +-2005-02-25 Ralf Corsepious ++2005-02-25 Ralf Corsépius + + * libm/common/fdlibm.h (FLT_UWORD_MAX, FLT_UWORD_HALF_MAX): Add + L qualifier for these long constants. +@@ -7459,13 +7495,13 @@ + * libc/time/strftime.c (strftime): Fix '%x' to deal with negative + years. Fix '%z' to use long, not int. + +-2005-02-24 Ralf Corsepious ++2005-02-24 Ralf Corsépius + + * libm/common/s_fpclassify.c: Use __uint32_t instead of int to + manipulate float values in integer form. + * libm/common/sf_round.c: Ditto. + +-2005-02-24 Ralf Corsepious ++2005-02-24 Ralf Corsépius + + * libc/include/sys/types.h [__rtems__]: Include new + header file machine/_types.h. +@@ -7829,7 +7865,7 @@ + * libc/stdio/fread.c (fread): Fix return value for unbuffered + fread. + +-2004-10-25 Ralf Corsepius ++2004-10-25 Ralf Corsépius + + * libc/include/machine/setjmp.h: Add AVR support. + * libc/sys/rtems/crt0.S [__AVR__]: Add __stack. +@@ -14061,7 +14097,7 @@ + + * libc/include/sys/unistd.h: Prototype chroot() for RTEMS. + +-2001-08-29 Ralf Corsepius ++2001-08-29 Ralf Corsépius + + * libc/machine/i386/f_atan2.S, libc/machine/i386/f_atan2f.S, + libc/machine/i386/f_exp.c, libc/machine/i386/f_expf.c, +@@ -14738,7 +14774,7 @@ + * libc/sys/linux/sys/utsname.h: Ditto. + * libc/sys/linux/sys/wait.h: Ditto. + +-2000-12-08 Ralf Corsepius ++2000-12-08 Ralf Corsépius + + * Makefile.am: $(INSTALL), $(INSTALL_DATA), and $(INSTALL_PROGRAM) + can be a relative path to $(top_srcdir)/install.sh so ensure the +@@ -15643,7 +15679,7 @@ + * libc/include/stdlib.h: add ptsname, grantpt, unlockpt to cygwin + section + +-Sat Oct 2 02:02:00 MEST 1999 Ralf Corsepius ++Sat Oct 2 02:02:00 MEST 1999 Ralf Corsépius + + * libc/machine/sh/asm.h: Added __SH4_SINGLE__ to DELAYED_BRANCHES + * libc/machine/sh/memcpy.S: Fix line wrapping in SL macro +diff -Naur newlib-1.18.0.orig/newlib/ChangeLog.rtems newlib-1.18.0-rtems4.10-20110518/newlib/ChangeLog.rtems +--- newlib-1.18.0.orig/newlib/ChangeLog.rtems 1970-01-01 01:00:00.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/ChangeLog.rtems 2011-05-18 14:27:09.026560247 +0200 +@@ -0,0 +1,301 @@ ++2011-01-14 Ralf Corsépius ++ ++ * libm/common/s_ilogb.c, libm/common/s_llround.c, ++ libm/common/s_log2.c, libm/common/s_lrint.c, ++ libm/common/s_lround.c, libm/common/s_rint.c, ++ libm/common/sf_ilogb.c, libm/common/sf_log2.c, ++ libm/common/sf_rint.c: Import from newlib-cvs. ++ ++2011-01-14 Ralf Corsépius ++ ++ * libm/common/fdlibm.h: ++ Add SAFE_LEFT_SHIFT, SAFE_RIGHT_SHIFT from newlib-cvs. ++ ++2011-01-07 Ralf Corsépius ++ ++ * libc/stdio/open_memstream.c: Replace 64 * 1024 with 0x10000 to ++ avoid integer overflow on h8300. ++ ++2011-01-05 Ralf Corsépius ++ ++ * libm/common/s_llrint.c: Back-port from newlib-cvs. ++ ++2011-01-05 Ralf Corsépius ++ ++ * libc/stdio/tmpnam.c: Include . ++ Use intptr_t instead of _POINTER_INT for improved portability. ++ * libc/misc/__dprintf.c: Include ++ Use intptr_t instead of _POINTER_INT for improved portability. ++ ++2011-01-05 Ralf Corsépius ++ ++ * libm/common/s_round.c: Cast const int to __int32_t. ++ ++2011-01-04 Ralf Corsépius ++ ++ * doc/makedoc.c: Add cludge to make makedoc 64bit compliant. ++ ++2011-01-04 Ralf Corsépius ++ ++ * libm/math/e_scalb.c: Include . ++ Don't rely on 65000 being a valid int. ++ ++2011-01-04 Ralf Corsépius ++ ++ * libc/posix/readdir.c: Include . ++ Cast to intptr_t instead of int. ++ ++2011-01-04 Ralf Corsépius ++ ++ * libc/string/memccpy.c, libc/string/memchr.c, ++ libc/string/memcmp.c, libc/string/memcpy.c, ++ libc/string/memmove.c, libc/string/mempcpy.c, ++ libc/string/memset.c, libc/string/stpcpy.c, ++ libc/string/stpncpy.c, libc/string/strcpy.c, ++ libc/string/strlen.c, libc/string/strncat.c, ++ libc/string/strncpy.c (UNALIGNED): ++ Include . ++ Cast to intptr_t instead of long. ++ ++2011-01-04 Ralf Corsépius ++ ++ * libc/stdio/open_memstream.c (internal_open_memstream_r): ++ Don't limit c->max to 64*1024 on targets with SIZE_MAX < 64*1024. ++ ++2010-10-05 Eric Blake ++ ++ memmem, strstr, strcasestr: fix bug with long periodic needle ++ * lib/str-two-way.h (two_way_long_needle): Avoid bug with long ++ periodic needle having false positive. ++ ++2010-08-24 Sebastian Huber ++ ++ * libc/posix/opendir.c: Added missing memory free. ++ ++2010-08-10 Ralf Corsépius ++ ++ PR 1475/newlib: ++ * libc/include/stdint.h: Fall back to compute SIZE_MAX based on ++ __SIZEOF_SIZE_T__ and __CHAR_BIT__ if available. ++ ++2010-08-04 Ralf Corsépius ++ ++ * libc/string/strcat.c: ++ Include . Use uintptr_t instead of long in ALIGNED. ++ * libc/string/strchr.c, libc/string/strcmp.c, libc/string/strncmp.c: ++ Include . Use uintptr_t instead of long in UNALIGNED. ++ * libc/include/sys/unistd.h: Activate decls for ++ getsid, setegid, seteuid. ++ ++2010-07-08 Ralf Corsépius ++ ++ * configure.host: Add -D_COMPILING_NEWLIB to newlib_cflags. ++ * libc/string/index.c, libc/string/rindex.c: Include . ++ * libc/stdlib/putenv_r.c: Include ++ ++2010-07-06 Corinna Vinschen ++ ++ * libc/posix/rewinddir.c (rewinddir): Remove incorrect cast to off_t. ++ * libc/sys/rtems/sys/dirent.h (_seekdir): Add prototype. ++ ++2010-06-17 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: Special case for sparc64. ++ ++2010-04-23 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: Add _mode_t. ++ * libc/include/sys/types.h: Derive mode_t from _mode_t. ++ ++2010-04-02 Ralf Corsépius ++ ++ * libc/include/sched.h, libc/include/sys/sched.h: ++ Adopt newlib-cvs's versions. ++ ++2010-03-25 Ralf Corsépius ++ ++ * libc/include/strings.h: New (split-out from string.h). ++ * libc/include/string.h: Remove bcmp, bcopy, bzero, ffs, index, rindex, ++ strcasecmp, strncasecmp (Moved to strings.h). ++ Remove strcmpi, stricmp, strncmpi, strnicmp. ++ * libc/misc/ffs.c: Use instead of . ++ * libc/string/bcmp.c: Use instead of . ++ * libc/string/bzero.c: Use instead of . ++ * libc/string/rindex.c: Use instead of . ++ * libc/string/strcasecmp.c: Use instead of . ++ * libc/string/strcasecmp.c: Use instead of . ++ ++2010-03-23 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: Add i386 to 64bit off_t targets. ++ ++2010-03-10 Ralf Corsépius ++ ++ * libc/posix/telldir.c: Adopt newlib-cvs's telldir.c ++ ++2010-02-10 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: Use __int64_t for _off_t, fpos_t for ++ selected targets. ++ ++2010-02-05 Ralf Corsépius ++ ++ * libc/posix/telldir.c: Remove bogus nested prototype of lseek(). ++ ++2010-01-11 Sebastian Huber ++ ++ * libc/posix/telldir.c (_cleanupdir): Fixed usage of freed memory. ++ ++2009-12-18 Ralf Corsépius ++ ++ * libc/search/db_local.h: ++ Use __uint32_t instead of u_int (prototype mismatches). ++ * libc/search/extern.h (__buf_init): ++ Use __uint32_t instead of int (16 bit target portability). ++ * libc/search/hash_buf.c: Use ptrdiff_t instead of __uint32_t, ++ use __uint32_t instead of int (16 bit target portability). ++ * libc/search/hash.h: Use __uint32_it instead of int ++ (16 bit target portability). ++ * libm/common/modfl.c: Add cast to (double*) to avoid GCC warning. ++ * libm/common/sf_llrint.c, libm/common/sf_round.c: Add explicit ++ casts to __uint32_t to avoid overflows on implicit casts. ++ ++2009-12-18 Ralf Corsépius ++ ++ Merger with newlib-1.18.0. ++ ++2009-10-29 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: Rework. ++ * libc/sys/rtems/machine/stdint.h: Remove. ++ * libc/include/inttypes.h: ++ Rework logic to determine PRI*PTR. ++ Prefer long64 over longlong64. ++ * libc/include/machine/_default_types.h: ++ Sync logic for __int32 with stdint.h (Prefer long over int). ++ * libc/include/stdint.h: ++ Remove __SPU__ hack. ++ Prefer int for int16_t (sync with _default_types.h). ++ Rework intptr_t determination. ++ ++2009-10-28 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/_types.h: New. ++ Add custom time for _ssize_t. ++ * libc/stdlib/assert.c: Sync with newlib-CVS. ++ * configure.host: Add -DHAVE_ASSERT_FUNC to newlib_cflags. ++ ++2009-10-27 Ralf Corsépius ++ ++ * libc/include/sys/pthread.h: ++ Add pthread_atfork (Mandated by IEEE Std 1003.1-2008). ++ Add pthread_rwlock_unlock (Formerly missing) ++ ++2009-10-26 Ralf Corsépius ++ ++ * libc/include/sys/signal.h: Sync with newlib-CVS. ++ ++2009-10-09 Ralf Corsépius ++ ++ * libc/include/sys/signal.h: Use pid_t as 1st arg to kill() ++ (mandated by POSIX). ++ ++2009-09-22 Ralf Corsépius ++ ++ * libc/sys/rtems/sys/queue.h: Update copyright (from FreeBSD). ++ Remove CIRCLEQ_*. ++ * libc/search/hcreate.c: Don't include sys/queue.h. ++ ++2009-09-18 Christopher Faylor ++ ++ * libc/include/sys/unistd.h: Declare getpagesize as returning ++ POSIX-mandated int. ++ ++2009-09-15 Ralf Corsépius ++ ++ * libc/include/stdlib.h: Add posix_memalign. ++ ++2009-09-11 Ralf Corsépius ++ ++ * configure.host (m32c): Remove -D_ABORT_PROVIDED. ++ ++2009-09-10 Ralf Corsépius ++ ++ * configure.host: Add -D_NO_POPEN. ++ * libc/sys/rtems/crt0.c: Don't provide waitpid unless used. ++ ++2009-09-09 Ralf Corsépius ++ ++ * configure.host: Add -D_NO_WORDEXP. ++ ++2009-09-06 Ralf Corsépius ++ ++ * libc/sys/rtems/crt0.c: Add issetugid. ++ ++2009-09-02 Ralf Corsépius ++ ++ * libc/sys/rtems/crt0.c: Rework. Introduce macro RTEMS_STUB. ++ ++2009-07-27 Ralf Corsépius ++ ++ * libc/sys/rtems/crt0.c: Add _isatty_r. ++ ++2009-07-06 Joel Sherrill ++ ++ * libc/include/sys/features.h: Define _UNIX98_THREAD_MUTEX_ATTRIBUTES. ++ ++2009-05-05 Ralf Corsépius ++ ++ * configure.host: Remove -DMISSING_SYSCALL_NAMES. ++ ++2009-03-11 Ralf Corsépius ++ ++ * libc/stdlib/assert.c: Don't build __assert_func. ++ * libc/sys/rtems/crt0.c: Add __assert_func. ++ ++2009-03-09 Ralf Corsépius ++ ++ * libc/machine/powerpc/times.c: Remove. ++ * libc/machine/powerpc/Makefile.am: Remove times.c. ++ * libc/machine/powerpc/Makefile.in: Regenerate. ++ ++2009-02-24 Ralf Corsépius ++ ++ * libc/unix/ttyname.c: Sync with newlib-cvs. ++ * configure.host: Add -DHAVE_BLKSIZE to newlib_cflags. ++ ++2009-02-22 Ralf Corsépius ++ ++ * libc/sys/rtems/machine/stdint.h: Add __lm32__. ++ * libc/machine/lm32/configure.in: Set AC_CONFIG_SRC to setjmp.S. ++ * libc/machine/lm32/configure: Regenerate. ++ ++2009-02-20 Ralf Corsépius ++ ++ * libc/unix/Makefile.in: Regenerate. ++ ++2009-02-20 Craig Howland on behalf of ++ Sebastian Huber ++ ++ * libc/unix/ttyname.c: Remove ttyname_r() (to a new file to avoid ++ coupling ttyname_r() and ttyname() due to the latter's large buffer). ++ * libc/unix/ttyname_r.c: New file to hold ttyname_r(), previously in ++ ttyname.c. ++ * libc/unix/ttyname.h: New file (common size definition for the 2 ++ ttyname*c files that are now split). ++ * libc/unix/Makefile.am (ELIX_2_SOURCES): Add ttyname_r.c. ++ ++2009-02-16 Ralf Corsépius ++ ++ * libc/sys/rtems/sys/param.h: ++ Update copyright notice from FreeBSD. ++ Remove HZ. ++ Add #include ++ Remove priority handling (moved to sys/priority.h). ++ Remove CLBYTES (Unused, abandoned in BSD). ++ ++2009-02-06 Ralf Corsépius ++ ++ * libc/include/sched.h: ++ Remove (collides with RTEMS's schedul.h). ++ +diff -Naur newlib-1.18.0.orig/newlib/configure.host newlib-1.18.0-rtems4.10-20110518/newlib/configure.host +--- newlib-1.18.0.orig/newlib/configure.host 2009-12-10 18:12:11.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/configure.host 2011-05-18 14:27:09.027560262 +0200 +@@ -556,6 +556,7 @@ + *-*-rtems*) + default_newlib_io_long_long="yes" + default_newlib_io_c99_formats="yes" ++ newlib_cflags="${newlib_cflags} -D_COMPILING_NEWLIB" + newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED -DEXIT_PROVIDED -DSIGNAL_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_NANOSLEEP -DHAVE_BLKSIZE -DHAVE_FCNTL -DHAVE_ASSERT_FUNC" + # turn off unsupported items in posix directory + newlib_cflags="${newlib_cflags} -D_NO_GETLOGIN -D_NO_GETPWENT -D_NO_GETUT -D_NO_GETPASS -D_NO_SIGSET -D_NO_WORDEXP -D_NO_POPEN" +diff -Naur newlib-1.18.0.orig/newlib/doc/makedoc.c newlib-1.18.0-rtems4.10-20110518/newlib/doc/makedoc.c +--- newlib-1.18.0.orig/newlib/doc/makedoc.c 2009-03-25 22:16:04.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/doc/makedoc.c 2011-05-18 14:27:09.027560262 +0200 +@@ -57,7 +57,7 @@ + { + char *ptr; + unsigned int write_idx; +- unsigned int size; ++ size_t size; + } string_type; + + +@@ -68,7 +68,7 @@ + + static void DEFUN(init_string_with_size,(buffer, size), + string_type *buffer AND +- unsigned int size ) ++ size_t size ) + { + buffer->write_idx = 0; + buffer->size = size; +@@ -219,8 +219,8 @@ + stinst_type *pc; + stinst_type sstack[STACK]; + stinst_type *ssp = &sstack[0]; +-int istack[STACK]; +-int *isp = &istack[0]; ++long istack[STACK]; ++long *isp = &istack[0]; + + typedef int *word_type; + +@@ -270,7 +270,7 @@ + { + isp++; + pc++; +- *isp = (int)(*pc); ++ *isp = (long)(*pc); + pc++; + + } +diff -Naur newlib-1.18.0.orig/newlib/libc/include/inttypes.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/inttypes.h +--- newlib-1.18.0.orig/newlib/libc/include/inttypes.h 2009-01-19 23:02:06.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/inttypes.h 2011-05-18 14:27:09.028560277 +0200 +@@ -242,15 +242,17 @@ + #define SCNxMAX __SCNMAX(x) + + /* ptr types */ +-#if __have_long64 +-#define __PRIPTR(x) __STRINGIFY(l##x) +-#define __SCNPTR(x) __STRINGIFY(l##x) +-#elif __have_longlong64 +-#define __PRIPTR(x) __STRINGIFY(ll##x) +-#define __SCNPTR(x) __STRINGIFY(ll##x) ++#if INTPTR_MAX == INT64_MAX ++#define __PRIPTR(x) __PRI64(x) ++#define __SCNPTR(x) __SCN64(x) ++#elif INTPTR_MAX == INT32_MAX ++#define __PRIPTR(x) __PRI32(x) ++#define __SCNPTR(x) __SCN32(x) ++#elif INTPTR_MAX == INT16_MAX ++#define __PRIPTR(x) __PRI16(x) ++#define __SCNPTR(x) __SCN16(x) + #else +-#define __PRIPTR(x) __STRINGIFY(x) +-#define __SCNPTR(x) __STRINGIFY(x) ++#error cannot determine PRI*PTR + #endif + + #define PRIdPTR __PRIPTR(d) +diff -Naur newlib-1.18.0.orig/newlib/libc/include/machine/_default_types.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/machine/_default_types.h +--- newlib-1.18.0.orig/newlib/libc/include/machine/_default_types.h 2008-06-12 00:14:54.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/machine/_default_types.h 2011-05-18 14:27:09.028560277 +0200 +@@ -54,14 +54,14 @@ + #endif + #endif + +-#if __EXP(INT_MAX) == 0x7fffffffL +-typedef signed int __int32_t; +-typedef unsigned int __uint32_t; +-#define ___int32_t_defined 1 +-#elif __EXP(LONG_MAX) == 0x7fffffffL ++#if __EXP(LONG_MAX) == 0x7fffffffL + typedef signed long __int32_t; + typedef unsigned long __uint32_t; + #define ___int32_t_defined 1 ++#elif __EXP(INT_MAX) == 0x7fffffffL ++typedef signed int __int32_t; ++typedef unsigned int __uint32_t; ++#define ___int32_t_defined 1 + #elif __EXP(SHRT_MAX) == 0x7fffffffL + typedef signed short __int32_t; + typedef unsigned short __uint32_t; +diff -Naur newlib-1.18.0.orig/newlib/libc/include/sched.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sched.h +--- newlib-1.18.0.orig/newlib/libc/include/sched.h 2007-09-21 23:02:15.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sched.h 2011-05-18 14:27:09.028560277 +0200 +@@ -1,11 +1,94 @@ ++/* ++ * Written by Joel Sherrill . ++ * ++ * COPYRIGHT (c) 1989-2010. ++ * On-Line Applications Research Corporation (OAR). ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose without fee is hereby granted, provided that this entire notice ++ * is included in all copies of any software which is or includes a copy ++ * or modification of this software. ++ * ++ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED ++ * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION ++ * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS ++ * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. ++ * ++ * $Id$ ++ */ ++ + #ifndef _SCHED_H_ + #define _SCHED_H_ + ++#include ++#include ++ + #ifdef __cplusplus + extern "C" { + #endif + +-#include ++#if defined(_POSIX_PRIORITY_SCHEDULING) ++/* ++ * XBD 13 - Set Scheduling Parameters, P1003.1b-2008, p. 1803 ++ */ ++int sched_setparam( ++ pid_t __pid, ++ const struct sched_param *__param ++); ++ ++/* ++ * XBD 13 - Set Scheduling Parameters, P1003.1b-2008, p. 1800 ++ */ ++int sched_getparam( ++ pid_t __pid, ++ struct sched_param *__param ++); ++ ++/* ++ * XBD 13 - Set Scheduling Policy and Scheduling Parameters, ++ * P1003.1b-2008, p. 1805 ++ */ ++int sched_setscheduler( ++ pid_t __pid, ++ int __policy, ++ const struct sched_param *__param ++); ++ ++/* ++ * XBD 13 - Get Scheduling Policy, P1003.1b-2008, p. 1801 ++ */ ++int sched_getscheduler( ++ pid_t __pid ++); ++ ++/* ++ * XBD 13 - Get Scheduling Parameter Limits, P1003.1b-2008, p. 1799 ++ */ ++int sched_get_priority_max( ++ int __policy ++); ++ ++int sched_get_priority_min( ++ int __policy ++); ++ ++/* ++ * XBD 13 - Get Scheduling Parameter Limits, P1003.1b-2008, p. 1802 ++ */ ++int sched_rr_get_interval( ++ pid_t __pid, ++ struct timespec *__interval ++); ++#endif /* _POSIX_PRIORITY_SCHEDULING */ ++ ++#if defined(_POSIX_THREADS) || defined(_POSIX_PRIORITY_SCHEDULING) ++ ++/* ++ * XBD 13 - Yield Processor, P1003.1b-2008, p. 1807 ++ */ ++int sched_yield( void ); ++ ++#endif /* _POSIX_THREADS or _POSIX_PRIORITY_SCHEDULING */ + + #ifdef __cplusplus + } +diff -Naur newlib-1.18.0.orig/newlib/libc/include/stdint.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/stdint.h +--- newlib-1.18.0.orig/newlib/libc/include/stdint.h 2009-04-24 23:55:07.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/stdint.h 2011-05-18 14:27:09.028560277 +0200 +@@ -33,7 +33,7 @@ + /* Check if "long" is 64bit or 32bit wide */ + #if __STDINT_EXP(LONG_MAX) > 0x7fffffff + #define __have_long64 1 +-#elif __STDINT_EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__) ++#elif __STDINT_EXP(LONG_MAX) == 0x7fffffff + #define __have_long32 1 + #endif + +@@ -49,14 +49,14 @@ + #define __int_least8_t_defined 1 + #endif + +-#if __STDINT_EXP(SHRT_MAX) == 0x7fff +-typedef signed short int16_t; +-typedef unsigned short uint16_t; +-#define __int16_t_defined 1 +-#elif __STDINT_EXP(INT_MAX) == 0x7fff ++#if __STDINT_EXP(INT_MAX) == 0x7fff + typedef signed int int16_t; + typedef unsigned int uint16_t; + #define __int16_t_defined 1 ++#elif __STDINT_EXP(SHRT_MAX) == 0x7fff ++typedef signed short int16_t; ++typedef unsigned short uint16_t; ++#define __int16_t_defined 1 + #elif __STDINT_EXP(SCHAR_MAX) == 0x7fff + typedef signed char int16_t; + typedef unsigned char uint16_t; +@@ -239,6 +239,29 @@ + * GCC doesn't provide an appropriate macro for [u]intptr_t + * For now, use __PTRDIFF_TYPE__ + */ ++#if defined(__SIZEOF_POINTER__) ++#if __SIZEOF_POINTER__ == 8 ++ typedef int64_t intptr_t; ++ typedef uint64_t uintptr_t; ++#define INTPTR_MAX INT64_MAX ++#define INTPTR_MIN INT64_MIN ++#define UINTPTR_MAX UINT64_MAX ++#elif __SIZEOF_POINTER__ == 4 ++ typedef int32_t intptr_t; ++ typedef uint32_t uintptr_t; ++#define INTPTR_MAX INT32_MAX ++#define INTPTR_MIN INT32_MIN ++#define UINTPTR_MAX UINT32_MAX ++#elif __SIZEOF_POINTER__ == 2 ++ typedef int16_t intptr_t; ++ typedef uint16_t uintptr_t; ++#define INTPTR_MAX INT16_MAX ++#define INTPTR_MIN INT16_MIN ++#define UINTPTR_MAX UINT16_MAX ++#else ++#error cannot determine intptr_t ++#endif ++#else + #if defined(__PTRDIFF_TYPE__) + typedef signed __PTRDIFF_TYPE__ intptr_t; + typedef unsigned __PTRDIFF_TYPE__ uintptr_t; +@@ -260,6 +283,7 @@ + #define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1) + #define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) + #endif ++#endif + + /* Limits of Specified-Width Integer Types */ + +@@ -408,6 +432,8 @@ + /* This must match size_t in stddef.h, currently long unsigned int */ + #ifdef __SIZE_MAX__ + #define SIZE_MAX __SIZE_MAX__ ++#elif defined(__SIZEOF_SIZE_T__) && defined(__CHAR_BIT__) ++#define SIZE_MAX (((1UL << (__SIZEOF_SIZE_T__ * __CHAR_BIT__ - 1)) - 1) * 2 + 1) + #else + #define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) + #endif +diff -Naur newlib-1.18.0.orig/newlib/libc/include/string.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/string.h +--- newlib-1.18.0.orig/newlib/libc/include/string.h 2008-06-18 17:27:27.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/string.h 2011-05-18 14:27:09.028560277 +0200 +@@ -49,18 +49,11 @@ + #ifndef __STRICT_ANSI__ + char *_EXFUN(strtok_r,(char *, const char *, char **)); + +-int _EXFUN(bcmp,(const void *, const void *, size_t)); +-void _EXFUN(bcopy,(const void *, void *, size_t)); +-void _EXFUN(bzero,(void *, size_t)); +-int _EXFUN(ffs,(int)); +-char *_EXFUN(index,(const char *, int)); + _PTR _EXFUN(memccpy,(_PTR, const _PTR, int, size_t)); + _PTR _EXFUN(mempcpy,(_PTR, const _PTR, size_t)); + _PTR _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t)); +-char *_EXFUN(rindex,(const char *, int)); + char *_EXFUN(stpcpy,(char *, const char *)); + char *_EXFUN(stpncpy,(char *, const char *, size_t)); +-int _EXFUN(strcasecmp,(const char *, const char *)); + char *_EXFUN(strcasestr,(const char *, const char *)); + char *_EXFUN(strdup,(const char *)); + char *_EXFUN(_strdup_r,(struct _reent *, const char *)); +@@ -69,7 +62,6 @@ + char *_EXFUN(strerror_r,(int, char *, size_t)); + size_t _EXFUN(strlcat,(char *, const char *, size_t)); + size_t _EXFUN(strlcpy,(char *, const char *, size_t)); +-int _EXFUN(strncasecmp,(const char *, const char *, size_t)); + size_t _EXFUN(strnlen,(const char *, size_t)); + char *_EXFUN(strsep,(char **, const char *)); + char *_EXFUN(strlwr,(char *)); +@@ -81,20 +73,6 @@ + int _EXFUN(strtosigno, (const char *__name)); + #endif + +-/* These function names are used on Windows and perhaps other systems. */ +-#ifndef strcmpi +-#define strcmpi strcasecmp +-#endif +-#ifndef stricmp +-#define stricmp strcasecmp +-#endif +-#ifndef strncmpi +-#define strncmpi strncasecmp +-#endif +-#ifndef strnicmp +-#define strnicmp strncasecmp +-#endif +- + #endif /* ! __STRICT_ANSI__ */ + + #include +diff -Naur newlib-1.18.0.orig/newlib/libc/include/strings.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/strings.h +--- newlib-1.18.0.orig/newlib/libc/include/strings.h 1970-01-01 01:00:00.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/strings.h 2011-05-18 14:27:09.029560292 +0200 +@@ -0,0 +1,44 @@ ++/* ++ * strings.h ++ * ++ * Definitions for string operations. ++ */ ++ ++#ifndef _STRINGS_H_ ++#define _STRINGS_H_ ++ ++#include "_ansi.h" ++#include ++ ++#include /* for size_t */ ++#include /* for locale_t */ ++ ++_BEGIN_STD_C ++ ++#ifndef __STRICT_ANSI__ ++/* ++ * Marked LEGACY in Open Group Base Specifications Issue 6/IEEE Std 1003.1-2004 ++ * Removed from Open Group Base Specifications Issue 7/IEEE Std 1003.1-2008 ++ */ ++int _EXFUN(bcmp,(const void *, const void *, size_t)); ++void _EXFUN(bcopy,(const void *, void *, size_t)); ++void _EXFUN(bzero,(void *, size_t)); ++char *_EXFUN(index,(const char *, int)); ++char *_EXFUN(rindex,(const char *, int)); ++#endif /* ! __STRICT_ANSI__ */ ++ ++int _EXFUN(ffs,(int)); ++int _EXFUN(strcasecmp,(const char *, const char *)); ++#if 0 ++/* Not implemented */ ++int _EXFUN(strcasecmp_l,(const char *, const char *, locale_t)); ++#endif ++int _EXFUN(strncasecmp,(const char *, const char *, size_t)); ++#if 0 ++/* Not implemented */ ++int _EXFUN(strncasecmp_l,(const char *, const char *, size_t, locale_t)); ++#endif ++ ++_END_STD_C ++ ++#endif /* _STRINGS_H_ */ +diff -Naur newlib-1.18.0.orig/newlib/libc/include/sys/features.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/features.h +--- newlib-1.18.0.orig/newlib/libc/include/sys/features.h 2009-07-06 20:59:04.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/features.h 2011-05-18 14:27:09.029560292 +0200 +@@ -33,7 +33,7 @@ + #define _POSIX_VERSION 199309L + #define _POSIX_ASYNCHRONOUS_IO 1 + #define _POSIX_FSYNC 1 +-#define _POSIX_MAPPED_FILES 1 ++/* #define _POSIX_MAPPED_FILES 1 */ + #define _POSIX_MEMLOCK 1 + #define _POSIX_MEMLOCK_RANGE 1 + #define _POSIX_MEMORY_PROTECTION 1 +diff -Naur newlib-1.18.0.orig/newlib/libc/include/sys/sched.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/sched.h +--- newlib-1.18.0.orig/newlib/libc/include/sys/sched.h 2002-06-20 21:51:24.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/sched.h 2011-05-18 14:27:09.029560292 +0200 +@@ -1,7 +1,7 @@ + /* + * Written by Joel Sherrill . + * +- * COPYRIGHT (c) 1989-2000. ++ * COPYRIGHT (c) 1989-2010. + * On-Line Applications Research Corporation (OAR). + * + * Permission to use, copy, modify, and distribute this software for any +@@ -14,51 +14,53 @@ + * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS + * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * +- * $Id$ ++ * $Id$ + */ + + +-#ifndef __POSIX_SYS_SCHEDULING_h +-#define __POSIX_SYS_SCHEDULING_h ++#ifndef _SYS_SCHED_H_ ++#define _SYS_SCHED_H_ + + #ifdef __cplusplus + extern "C" { + #endif + +-#include +- +-#include +-#include +- +-/* Scheduling Policies, P1003.1b-1993, p. 250 +- NOTE: SCHED_SPORADIC added by P1003.4b/D8, p. 34. */ +- ++/* Scheduling Policies */ ++/* Open Group Specifications Issue 6 */ ++#if defined(__CYGWIN__) ++#define SCHED_OTHER 3 ++#else + #define SCHED_OTHER 0 ++#endif ++ + #define SCHED_FIFO 1 + #define SCHED_RR 2 + + #if defined(_POSIX_SPORADIC_SERVER) +-#define SCHED_SPORADIC 3 ++#define SCHED_SPORADIC 4 + #endif + +-/* Scheduling Parameters, P1003.1b-1993, p. 249 +- NOTE: Fields whose name begins with "ss_" added by P1003.4b/D8, p. 33. */ ++/* Scheduling Parameters */ ++/* Open Group Specifications Issue 6 */ + + struct sched_param { + int sched_priority; /* Process execution scheduling priority */ + +-#if defined(_POSIX_SPORADIC_SERVER) +- int ss_low_priority; /* Low scheduling priority for sporadic */ ++#if defined(_POSIX_SPORADIC_SERVER) || defined(_POSIX_THREAD_SPORADIC_SERVER) ++ int sched_ss_low_priority; /* Low scheduling priority for sporadic */ + /* server */ +- struct timespec ss_replenish_period; ++ struct timespec sched_ss_repl_period; + /* Replenishment period for sporadic server */ +- struct timespec ss_initial_budget; /* Initial budget for sporadic server */ ++ struct timespec sched_ss_init_budget; ++ /* Initial budget for sporadic server */ ++ int sched_ss_max_repl; /* Maximum pending replenishments for */ ++ /* sporadic server */ + #endif + }; + + #ifdef __cplusplus + } +-#endif ++#endif + + #endif + /* end of include file */ +diff -Naur newlib-1.18.0.orig/newlib/libc/include/sys/types.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/types.h +--- newlib-1.18.0.orig/newlib/libc/include/sys/types.h 2009-09-28 18:42:21.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/sys/types.h 2011-05-18 14:27:09.029560292 +0200 +@@ -176,7 +176,11 @@ + #endif + typedef _ssize_t ssize_t; + +-#ifndef __CYGWIN__ ++#if defined(__rtems__) ++typedef _mode_t mode_t; ++#endif ++ ++#if !defined(__CYGWIN__) && !defined(__rtems__) + #ifdef __MS_types__ + typedef char * addr_t; + typedef int mode_t; +diff -Naur newlib-1.18.0.orig/newlib/libc/include/time.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/time.h +--- newlib-1.18.0.orig/newlib/libc/include/time.h 2008-10-16 23:53:58.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/include/time.h 2011-05-18 14:27:09.029560292 +0200 +@@ -212,7 +212,11 @@ + the identifier of the CPU_time clock associated with the PROCESS + making the function call. */ + ++#if defined(__rtems__) && !defined( __STRICT_ANSI__) ++/* Don't use: Removed in rtems > 4.10 */ + #define CLOCK_PROCESS_CPUTIME (clockid_t)2 ++#endif ++#define CLOCK_PROCESS_CPUTIME_ID (clockid_t)2 + + #endif + +@@ -222,7 +226,11 @@ + the identifier of the CPU_time clock associated with the THREAD + making the function call. */ + ++#if defined(__rtems__) && !defined( __STRICT_ANSI__) ++/* Don't use: Removed in rtems > 4.10 */ + #define CLOCK_THREAD_CPUTIME (clockid_t)3 ++#endif ++#define CLOCK_THREAD_CPUTIME_ID (clockid_t)3 + + #endif + +diff -Naur newlib-1.18.0.orig/newlib/libc/machine/powerpc/Makefile.am newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/Makefile.am +--- newlib-1.18.0.orig/newlib/libc/machine/powerpc/Makefile.am 2007-05-24 19:33:35.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/Makefile.am 2011-05-18 14:27:09.029560292 +0200 +@@ -10,7 +10,7 @@ + + AM_CFLAGS = -I $(srcdir)/../../stdio -I $(srcdir)/../../stdlib + +-lib_a_SOURCES = setjmp.S times.c ++lib_a_SOURCES = setjmp.S + lib_a_CCASFLAGS=$(AM_CCASFLAGS) + lib_a_CFLAGS=$(AM_CFLAGS) + lib_a_LIBADD = @extra_objs@ +diff -Naur newlib-1.18.0.orig/newlib/libc/machine/powerpc/Makefile.in newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/Makefile.in +--- newlib-1.18.0.orig/newlib/libc/machine/powerpc/Makefile.in 2009-10-21 00:44:03.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/Makefile.in 2011-05-18 14:27:09.030560307 +0200 +@@ -51,7 +51,7 @@ + LIBRARIES = $(noinst_LIBRARIES) + ARFLAGS = cru + lib_a_AR = $(AR) $(ARFLAGS) +-am_lib_a_OBJECTS = lib_a-setjmp.$(OBJEXT) lib_a-times.$(OBJEXT) ++am_lib_a_OBJECTS = lib_a-setjmp.$(OBJEXT) + lib_a_OBJECTS = $(am_lib_a_OBJECTS) + DEFAULT_INCLUDES = -I.@am__isrc@ + depcomp = +@@ -173,7 +173,7 @@ + AM_CCASFLAGS = $(INCLUDES) + noinst_LIBRARIES = lib.a + AM_CFLAGS = -I $(srcdir)/../../stdio -I $(srcdir)/../../stdlib +-lib_a_SOURCES = setjmp.S times.c ++lib_a_SOURCES = setjmp.S + lib_a_CCASFLAGS = $(AM_CCASFLAGS) + lib_a_CFLAGS = $(AM_CFLAGS) + lib_a_LIBADD = @extra_objs@ +@@ -184,7 +184,7 @@ + all: all-am + + .SUFFIXES: +-.SUFFIXES: .S .c .o .obj ++.SUFFIXES: .S .o .obj + am--refresh: + @: + $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +@@ -245,18 +245,6 @@ + lib_a-setjmp.obj: setjmp.S + $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-setjmp.obj `if test -f 'setjmp.S'; then $(CYGPATH_W) 'setjmp.S'; else $(CYGPATH_W) '$(srcdir)/setjmp.S'; fi` + +-.c.o: +- $(COMPILE) -c $< +- +-.c.obj: +- $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-lib_a-times.o: times.c +- $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-times.o `test -f 'times.c' || echo '$(srcdir)/'`times.c +- +-lib_a-times.obj: times.c +- $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-times.obj `if test -f 'times.c'; then $(CYGPATH_W) 'times.c'; else $(CYGPATH_W) '$(srcdir)/times.c'; fi` +- + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ +diff -Naur newlib-1.18.0.orig/newlib/libc/machine/powerpc/times.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/times.c +--- newlib-1.18.0.orig/newlib/libc/machine/powerpc/times.c 2002-07-22 22:26:51.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/machine/powerpc/times.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +-/* Time support routines for PowerPC. +- * +- * Written by Aldy Hernandez. +- */ +- +-#include <_ansi.h> +-#include +-#include +-#include +-#include +- +-clock_t +-times (struct tms *tp) +-{ +- struct rusage usage; +- union { +- struct rusage r; +- /* Newlib's rusage has only 2 fields. We need to make room for +- when we call the system's rusage. This should be enough. */ +- int filler[32]; +- } host_ru; +- +- getrusage (RUSAGE_SELF, (void *)&host_ru); +- +- if (tp) +- { +- tp->tms_utime = host_ru.r.ru_utime.tv_sec * 1000 +- + host_ru.r.ru_utime.tv_usec; +- tp->tms_stime = host_ru.r.ru_stime.tv_sec * 1000 +- + host_ru.r.ru_stime.tv_usec; +- tp->tms_cutime = 0; /* user time, children */ +- tp->tms_cstime = 0; /* system time, children */ +- } +- +- return tp->tms_utime; +-} +diff -Naur newlib-1.18.0.orig/newlib/libc/misc/__dprintf.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/misc/__dprintf.c +--- newlib-1.18.0.orig/newlib/libc/misc/__dprintf.c 2008-12-11 18:27:55.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/misc/__dprintf.c 2011-05-18 14:27:09.034560370 +0200 +@@ -5,6 +5,7 @@ + */ + + #include <_ansi.h> ++#include + #include "ctype.h" + #include "reent.h" + #include "string.h" +@@ -131,7 +132,7 @@ + write_string (unctrl (c)); + break; + case 'p' : +- l = (_POINTER_INT) va_arg (args, char *); ++ l = (intptr_t) va_arg (args, char *); + print_number (16, 1, l); + break; + case 'd' : +diff -Naur newlib-1.18.0.orig/newlib/libc/misc/ffs.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/misc/ffs.c +--- newlib-1.18.0.orig/newlib/libc/misc/ffs.c 2003-06-06 21:57:51.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/misc/ffs.c 2011-05-18 14:27:09.034560370 +0200 +@@ -24,7 +24,7 @@ + + No supporting OS subroutines are required. */ + +-#include <_ansi.h> ++#include + + int + _DEFUN(ffs, (word), +diff -Naur newlib-1.18.0.orig/newlib/libc/posix/opendir.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/opendir.c +--- newlib-1.18.0.orig/newlib/libc/posix/opendir.c 2003-06-06 21:57:51.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/opendir.c 2011-05-18 14:27:09.034560370 +0200 +@@ -74,6 +74,7 @@ + dirp->dd_len = 512; + + if (dirp->dd_buf == NULL) { ++ free(dirp); + close (fd); + return NULL; + } +diff -Naur newlib-1.18.0.orig/newlib/libc/posix/readdir.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/readdir.c +--- newlib-1.18.0.orig/newlib/libc/posix/readdir.c 2003-06-06 21:57:51.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/readdir.c 2011-05-18 14:27:09.034560370 +0200 +@@ -37,6 +37,7 @@ + static char sccsid[] = "@(#)readdir.c 5.7 (Berkeley) 6/1/90"; + #endif /* LIBC_SCCS and not lint */ + ++#include + #include + + extern int getdents (int fd, void *dp, int count); +@@ -75,7 +76,7 @@ + continue; + } + dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); +- if ((int)dp & 03) { /* bogus pointer check */ ++ if ((intptr_t)dp & 03) { /* bogus pointer check */ + #ifdef HAVE_DD_LOCK + __lock_release_recursive(dirp->dd_lock); + #endif +diff -Naur newlib-1.18.0.orig/newlib/libc/posix/rewinddir.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/rewinddir.c +--- newlib-1.18.0.orig/newlib/libc/posix/rewinddir.c 2003-06-06 21:57:51.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/rewinddir.c 2011-05-18 14:27:09.035560385 +0200 +@@ -48,7 +48,7 @@ + #ifdef HAVE_DD_LOCK + __lock_acquire_recursive(dirp->dd_lock); + #endif +- _seekdir((dirp), (off_t)0); ++ _seekdir((dirp), 0L); + #ifdef HAVE_DD_LOCK + __lock_release_recursive(dirp->dd_lock); + #endif +diff -Naur newlib-1.18.0.orig/newlib/libc/posix/telldir.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/telldir.c +--- newlib-1.18.0.orig/newlib/libc/posix/telldir.c 2008-11-27 22:01:40.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/posix/telldir.c 2011-05-18 14:27:09.035560385 +0200 +@@ -67,7 +67,7 @@ + #define NDIRHASH 32 /* Num of hash lists, must be a power of 2 */ + #define LOCHASH(i) ((i)&(NDIRHASH-1)) + +-static long dd_loccnt; /* Index of entry for sequential readdir's */ ++static long dd_loccnt = 1; /* Index of entry for sequential readdir's */ + static struct ddloc *dd_hash[NDIRHASH]; /* Hash list heads for ddlocs */ + __LOCK_INIT(static, dd_hash_lock); + +@@ -119,40 +119,46 @@ + register struct ddloc *lp; + register struct ddloc **prevlp; + struct dirent *dp; +- extern long lseek(); + + #ifdef HAVE_DD_LOCK + __lock_acquire(dd_hash_lock); + #endif +- prevlp = &dd_hash[LOCHASH(loc)]; +- lp = *prevlp; +- while (lp != NULL) { +- if (lp->loc_index == loc) +- break; +- prevlp = &lp->loc_next; +- lp = lp->loc_next; +- } +- if (lp == NULL) { ++ if (loc != 0) { ++ prevlp = &dd_hash[LOCHASH(loc)]; ++ lp = *prevlp; ++ while (lp != NULL) { ++ if (lp->loc_index == loc) ++ break; ++ prevlp = &lp->loc_next; ++ lp = lp->loc_next; ++ } ++ if (lp == NULL) { + #ifdef HAVE_DD_LOCK +- __lock_release(dd_hash_lock); ++ __lock_release(dd_hash_lock); + #endif +- return; +- } +- if (lp->loc_loc == dirp->dd_loc && lp->loc_seek == dirp->dd_seek) +- goto found; +- (void) lseek(dirp->dd_fd, lp->loc_seek, 0); +- dirp->dd_seek = lp->loc_seek; +- dirp->dd_loc = 0; +- while (dirp->dd_loc < lp->loc_loc) { +- dp = readdir(dirp); +- if (dp == NULL) +- break; +- } ++ return; ++ } ++ if (lp->loc_loc == dirp->dd_loc && lp->loc_seek == dirp->dd_seek) ++ goto found; ++ (void) lseek(dirp->dd_fd, lp->loc_seek, 0); ++ dirp->dd_seek = lp->loc_seek; ++ dirp->dd_loc = 0; ++ while (dirp->dd_loc < lp->loc_loc) { ++ dp = readdir(dirp); ++ if (dp == NULL) ++ break; ++ } + found: + #ifdef SINGLEUSE +- *prevlp = lp->loc_next; +- free((caddr_t)lp); ++ *prevlp = lp->loc_next; ++ free((caddr_t)lp); + #endif ++ } else { ++ // loc 0 means rewinding ++ (void) lseek(dirp->dd_fd, 0, 0); ++ dirp->dd_seek = 0; ++ dirp->dd_loc = 0; ++ } + #ifdef HAVE_DD_LOCK + __lock_release(dd_hash_lock); + #endif +@@ -169,26 +175,26 @@ + __lock_acquire(dd_hash_lock); + #endif + for (i = 0; i < NDIRHASH; ++i) { ++ struct ddloc head; + register struct ddloc *lp; + register struct ddloc *prevlp; ++ + lp = dd_hash[i]; +- while (lp != NULL && lp->loc_dirp == dirp) { +- dd_hash[i] = lp->loc_next; +- prevlp = lp; +- free((caddr_t)lp); +- lp = prevlp->loc_next; +- } +- prevlp = lp; ++ head.loc_next = lp; ++ prevlp = &head; + while (lp != NULL) { +- lp = lp->loc_next; +- if (lp != NULL && lp->loc_dirp == dirp) { +- prevlp->loc_next = lp->loc_next; ++ struct ddloc *nextlp; ++ ++ nextlp = lp->loc_next; ++ if (lp->loc_dirp == dirp) { ++ prevlp->loc_next = nextlp; + free((caddr_t)lp); +- lp = prevlp; + } + else + prevlp = lp; ++ lp = nextlp; + } ++ dd_hash[i] = head.loc_next; + } + #ifdef HAVE_DD_LOCK + __lock_release(dd_hash_lock); +diff -Naur newlib-1.18.0.orig/newlib/libc/search/db_local.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/db_local.h +--- newlib-1.18.0.orig/newlib/libc/search/db_local.h 2002-06-25 01:05:08.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/db_local.h 2011-05-18 14:27:09.035560385 +0200 +@@ -102,11 +102,11 @@ + typedef struct __db { + DBTYPE type; /* Underlying db type. */ + int (*close)(struct __db *); +- int (*del)(const struct __db *, const DBT *, u_int); +- int (*get)(const struct __db *, const DBT *, DBT *, u_int); +- int (*put)(const struct __db *, DBT *, const DBT *, u_int); +- int (*seq)(const struct __db *, DBT *, DBT *, u_int); +- int (*sync)(const struct __db *, u_int); ++ int (*del)(const struct __db *, const DBT *, __uint32_t); ++ int (*get)(const struct __db *, const DBT *, DBT *, __uint32_t); ++ int (*put)(const struct __db *, DBT *, const DBT *, __uint32_t); ++ int (*seq)(const struct __db *, DBT *, DBT *, __uint32_t); ++ int (*sync)(const struct __db *, __uint32_t); + void *internal; /* Access method private. */ + int (*fd)(const struct __db *); + } DB; +diff -Naur newlib-1.18.0.orig/newlib/libc/search/extern.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/extern.h +--- newlib-1.18.0.orig/newlib/libc/search/extern.h 2002-06-20 21:51:31.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/extern.h 2011-05-18 14:27:09.035560385 +0200 +@@ -43,7 +43,7 @@ + int __big_split(HTAB *, BUFHEAD *, BUFHEAD *, BUFHEAD *, + int, __uint32_t, SPLIT_RETURN *); + int __buf_free(HTAB *, int, int); +-void __buf_init(HTAB *, int); ++void __buf_init(HTAB *, __uint32_t); + __uint32_t __call_hash(HTAB *, char *, int); + int __delpair(HTAB *, BUFHEAD *, int); + int __expand_table(HTAB *); +diff -Naur newlib-1.18.0.orig/newlib/libc/search/hash_buf.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/hash_buf.c +--- newlib-1.18.0.orig/newlib/libc/search/hash_buf.c 2004-05-26 19:57:10.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/hash_buf.c 2011-05-18 14:27:09.035560385 +0200 +@@ -118,7 +118,7 @@ + int newpage; /* If prev_bp set, indicates a new overflow page. */ + { + BUFHEAD *bp; +- __uint32_t is_disk_mask; ++ ptrdiff_t is_disk_mask; + int is_disk, segment_ndx; + SEGMENT segp; + +@@ -298,7 +298,7 @@ + extern void + __buf_init(hashp, nbytes) + HTAB *hashp; +- int nbytes; ++ __uint32_t nbytes; + { + BUFHEAD *bfp; + int npages; +diff -Naur newlib-1.18.0.orig/newlib/libc/search/hash.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/hash.h +--- newlib-1.18.0.orig/newlib/libc/search/hash.h 2008-07-02 20:38:45.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/search/hash.h 2011-05-18 14:27:09.035560385 +0200 +@@ -82,7 +82,7 @@ + + /* Hash Table Information */ + typedef struct hashhdr { /* Disk resident portion */ +- int magic; /* Magic NO for hash tables */ ++ __uint32_t magic; /* Magic NO for hash tables */ + int version; /* Version ID */ + __uint32_t lorder; /* Byte Order */ + int bsize; /* Bucket/Page Size */ +@@ -97,7 +97,7 @@ + int high_mask; /* Mask to modulo into entire table */ + int low_mask; /* Mask to modulo into lower half of + * table */ +- int ffactor; /* Fill factor */ ++ __uint32_t ffactor; /* Fill factor */ + int nkeys; /* Number of keys in hash table */ + int hdrpages; /* Size of table header */ + int h_charkey; /* value of hash(CHARKEY) */ +diff -Naur newlib-1.18.0.orig/newlib/libc/stdio/open_memstream.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdio/open_memstream.c +--- newlib-1.18.0.orig/newlib/libc/stdio/open_memstream.c 2009-02-25 05:00:05.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdio/open_memstream.c 2011-05-18 14:27:09.036560400 +0200 +@@ -330,8 +330,10 @@ + c->max *= sizeof(wchar_t); + if (c->max < 64) + c->max = 64; +- else if (c->max > 64 * 1024) +- c->max = 64 * 1024; ++#if (SIZE_MAX >= 0x10000) ++ else if (c->max > 0x10000) ++ c->max = 0x10000; ++#endif + *size = 0; + *buf = _malloc_r (ptr, c->max); + if (!*buf) +diff -Naur newlib-1.18.0.orig/newlib/libc/stdio/tmpnam.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdio/tmpnam.c +--- newlib-1.18.0.orig/newlib/libc/stdio/tmpnam.c 2004-04-23 22:01:55.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdio/tmpnam.c 2011-05-18 14:27:09.036560400 +0200 +@@ -94,6 +94,7 @@ + #include <_ansi.h> + #include + #include ++#include + #include + #include + #include +@@ -109,7 +110,7 @@ + char *result _AND + _CONST char *part1 _AND + _CONST char *part2 _AND +- int part3 _AND ++ intptr_t part3 _AND + int *part4) + { + /* Generate the filename and make sure that there isn't one called +@@ -183,7 +184,7 @@ + if (filename) + { + if (! worker (p, filename, dir, prefix, +- _getpid_r (p) ^ (int) (_POINTER_INT) p, &p->_inc)) ++ _getpid_r (p) ^ (intptr_t) p, &p->_inc)) + return NULL; + } + return filename; +diff -Naur newlib-1.18.0.orig/newlib/libc/stdlib/putenv_r.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdlib/putenv_r.c +--- newlib-1.18.0.orig/newlib/libc/stdlib/putenv_r.c 2004-11-24 23:34:14.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdlib/putenv_r.c 2011-05-18 14:27:09.036560400 +0200 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #include "envlock.h" + +diff -Naur newlib-1.18.0.orig/newlib/libc/stdlib/strtod.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdlib/strtod.c +--- newlib-1.18.0.orig/newlib/libc/stdlib/strtod.c 2009-12-03 17:11:27.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/stdlib/strtod.c 2011-05-18 14:27:09.036560400 +0200 +@@ -299,15 +299,17 @@ + } + s0 = s; + y = z = 0; +- for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) +- if (nd < 9) +- y = 10*y + c - '0'; +- else if (nd < 16) +- z = 10*z + c - '0'; ++ for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) { ++ if (nd < DBL_DIG + 1) { ++ if (nd < 9) ++ y = 10*y + c - '0'; ++ else ++ z = 10*z + c - '0'; ++ } ++ } + nd0 = nd; + if (strncmp (s, _localeconv_r (ptr)->decimal_point, +- strlen (_localeconv_r (ptr)->decimal_point)) == 0) +- { ++ strlen (_localeconv_r (ptr)->decimal_point)) == 0) { + decpt = 1; + c = *(s += strlen (_localeconv_r (ptr)->decimal_point)); + if (!nd) { +@@ -325,20 +327,28 @@ + have_dig: + nz++; + if (c -= '0') { +- nf += nz; +- for(i = 1; i < nz; i++) +- if (nd++ < 9) +- y *= 10; +- else if (nd <= DBL_DIG + 1) +- z *= 10; +- if (nd++ < 9) +- y = 10*y + c; +- else if (nd <= DBL_DIG + 1) +- z = 10*z + c; +- nz = 0; ++ for(i = 1; i < nz; i++) { ++ if (nd <= DBL_DIG + 1) { ++ if (nd + i < 10) ++ y *= 10; ++ else ++ z *= 10; ++ } + } ++ if (nd <= DBL_DIG + 1) { ++ if (nd + i < 10) ++ y = 10*y + c; ++ else ++ z = 10*z + c; ++ } ++ if (nd <= DBL_DIG + 1) { ++ nf += nz; ++ nd += nz; ++ } ++ nz = 0; + } + } ++ } + dig_done: + e = 0; + if (c == 'e' || c == 'E') { +diff -Naur newlib-1.18.0.orig/newlib/libc/string/bcmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bcmp.c +--- newlib-1.18.0.orig/newlib/libc/string/bcmp.c 2005-10-28 23:21:07.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bcmp.c 2011-05-18 14:27:09.037560415 +0200 +@@ -6,11 +6,11 @@ + bcmp + + ANSI_SYNOPSIS +- #include ++ #include + int bcmp(const void *<[s1]>, const void *<[s2]>, size_t <[n]>); + + TRAD_SYNOPSIS +- #include ++ #include + int bcmp(<[s1]>, <[s2]>, <[n]>) + const void *<[s1]>; + const void *<[s2]>; +@@ -35,7 +35,7 @@ + bcmp ansi pure + */ + +-#include ++#include + + int + _DEFUN (bcmp, (m1, m2, n), +diff -Naur newlib-1.18.0.orig/newlib/libc/string/bcopy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bcopy.c +--- newlib-1.18.0.orig/newlib/libc/string/bcopy.c 2002-05-23 20:46:04.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bcopy.c 2011-05-18 14:27:09.037560415 +0200 +@@ -3,7 +3,7 @@ + <>---copy memory regions + + ANSI_SYNOPSIS +- #include ++ #include + void bcopy(const void *<[in]>, void *<[out]>, size_t <[n]>); + + TRAD_SYNOPSIS +@@ -26,7 +26,7 @@ + bcopy - pure + */ + +-#include ++#include + + void + _DEFUN (bcopy, (b1, b2, length), +diff -Naur newlib-1.18.0.orig/newlib/libc/string/bzero.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bzero.c +--- newlib-1.18.0.orig/newlib/libc/string/bzero.c 2002-05-23 20:46:04.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/bzero.c 2011-05-18 14:27:09.037560415 +0200 +@@ -6,11 +6,11 @@ + bzero + + ANSI_SYNOPSIS +- #include ++ #include + void bzero(void *<[b]>, size_t <[length]>); + + TRAD_SYNOPSIS +- #include ++ #include + void bzero(<[b]>, <[length]>) + void *<[b]>; + size_t <[length]>; +@@ -30,7 +30,7 @@ + <> requires no supporting OS subroutines. + */ + +-#include ++#include + + _VOID + _DEFUN (bzero, (b, length), +diff -Naur newlib-1.18.0.orig/newlib/libc/string/index.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/index.c +--- newlib-1.18.0.orig/newlib/libc/string/index.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/index.c 2011-05-18 14:27:09.037560415 +0200 +@@ -10,7 +10,7 @@ + char * index(const char *<[string]>, int <[c]>); + + TRAD_SYNOPSIS +- #include ++ #include + char * index(<[string]>, <[c]>); + char *<[string]>; + int *<[c]>; +@@ -33,7 +33,8 @@ + index - pure + */ + +-#include ++#include ++#include /* strchr */ + + char * + _DEFUN (index, (s, c), +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memccpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memccpy.c +--- newlib-1.18.0.orig/newlib/libc/string/memccpy.c 2002-07-23 23:38:00.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memccpy.c 2011-05-18 14:27:09.037560415 +0200 +@@ -35,13 +35,14 @@ + */ + + #include <_ansi.h> ++#include + #include + #include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + /* How many bytes are copied each iteration of the word copy loop. */ + #define LITTLEBLOCKSIZE (sizeof (long)) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memchr.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memchr.c +--- newlib-1.18.0.orig/newlib/libc/string/memchr.c 2008-05-27 01:31:08.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memchr.c 2011-05-18 14:27:09.037560415 +0200 +@@ -38,10 +38,11 @@ + + #include <_ansi.h> + #include ++#include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ +-#define UNALIGNED(X) ((long)X & (sizeof (long) - 1)) ++#define UNALIGNED(X) ((intptr_t)X & (sizeof (long) - 1)) + + /* How many bytes are loaded each iteration of the word copy loop. */ + #define LBLOCKSIZE (sizeof (long)) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memcmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memcmp.c +--- newlib-1.18.0.orig/newlib/libc/string/memcmp.c 2005-03-06 21:40:05.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memcmp.c 2011-05-18 14:27:09.037560415 +0200 +@@ -37,11 +37,11 @@ + */ + + #include +- ++#include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + /* How many bytes are copied each iteration of the word copy loop. */ + #define LBLOCKSIZE (sizeof (long)) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memcpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memcpy.c +--- newlib-1.18.0.orig/newlib/libc/string/memcpy.c 2008-12-11 18:27:56.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memcpy.c 2011-05-18 14:27:09.038560431 +0200 +@@ -34,11 +34,12 @@ + */ + + #include <_ansi.h> ++#include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + /* How many bytes are copied each iteration of the 4X unrolled loop. */ + #define BIGBLOCKSIZE (sizeof (long) << 2) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memmove.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memmove.c +--- newlib-1.18.0.orig/newlib/libc/string/memmove.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memmove.c 2011-05-18 14:27:09.039560447 +0200 +@@ -36,13 +36,14 @@ + */ + + #include ++#include + #include <_ansi.h> + #include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + /* How many bytes are copied each iteration of the 4X unrolled loop. */ + #define BIGBLOCKSIZE (sizeof (long) << 2) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/mempcpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/mempcpy.c +--- newlib-1.18.0.orig/newlib/libc/string/mempcpy.c 2002-07-23 23:38:00.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/mempcpy.c 2011-05-18 14:27:09.039560447 +0200 +@@ -34,10 +34,11 @@ + #include + #include + #include ++#include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((uintptr_t)Y & (sizeof (long) - 1))) + + /* How many bytes are copied each iteration of the 4X unrolled loop. */ + #define BIGBLOCKSIZE (sizeof (long) << 2) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/memset.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memset.c +--- newlib-1.18.0.orig/newlib/libc/string/memset.c 2008-05-27 20:44:40.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/memset.c 2011-05-18 14:27:09.039560447 +0200 +@@ -34,9 +34,10 @@ + */ + + #include ++#include + + #define LBLOCKSIZE (sizeof(long)) +-#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) ++#define UNALIGNED(X) ((intptr_t)X & (LBLOCKSIZE - 1)) + #define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) + + _PTR +diff -Naur newlib-1.18.0.orig/newlib/libc/string/rindex.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/rindex.c +--- newlib-1.18.0.orig/newlib/libc/string/rindex.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/rindex.c 2011-05-18 14:27:09.039560447 +0200 +@@ -10,7 +10,7 @@ + char * rindex(const char *<[string]>, int <[c]>); + + TRAD_SYNOPSIS +- #include ++ #include + char * rindex(<[string]>, <[c]>); + char *<[string]>; + int *<[c]>; +@@ -33,7 +33,8 @@ + rindex - pure + */ + +-#include ++#include ++#include /* strchr */ + + char * + _DEFUN (rindex, (s, c), +diff -Naur newlib-1.18.0.orig/newlib/libc/string/stpcpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/stpcpy.c +--- newlib-1.18.0.orig/newlib/libc/string/stpcpy.c 2007-06-28 19:07:23.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/stpcpy.c 2011-05-18 14:27:09.039560447 +0200 +@@ -34,6 +34,7 @@ + */ + + #include ++#include + #include + + /*SUPPRESS 560*/ +@@ -41,7 +42,7 @@ + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/stpncpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/stpncpy.c +--- newlib-1.18.0.orig/newlib/libc/string/stpncpy.c 2007-06-28 19:07:23.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/stpncpy.c 2011-05-18 14:27:09.039560447 +0200 +@@ -40,6 +40,7 @@ + */ + + #include ++#include + #include + + /*SUPPRESS 560*/ +@@ -47,7 +48,7 @@ + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strcasecmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcasecmp.c +--- newlib-1.18.0.orig/newlib/libc/string/strcasecmp.c 2009-04-23 20:11:22.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcasecmp.c 2011-05-18 14:27:09.040560463 +0200 +@@ -38,7 +38,7 @@ + strcasecmp + */ + +-#include ++#include + #include + + int +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strcat.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcat.c +--- newlib-1.18.0.orig/newlib/libc/string/strcat.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcat.c 2011-05-18 14:27:09.040560463 +0200 +@@ -33,12 +33,13 @@ + strcat ansi pure + */ + ++#include + #include + #include + + /* Nonzero if X is aligned on a "long" boundary. */ + #define ALIGNED(X) \ +- (((long)X & (sizeof (long) - 1)) == 0) ++ (((uintptr_t)X & (sizeof (long) - 1)) == 0) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strchr.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strchr.c +--- newlib-1.18.0.orig/newlib/libc/string/strchr.c 2008-05-22 04:31:46.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strchr.c 2011-05-18 14:27:09.040560463 +0200 +@@ -33,11 +33,12 @@ + strchr ansi pure + */ + ++#include + #include + #include + + /* Nonzero if X is not aligned on a "long" boundary. */ +-#define UNALIGNED(X) ((long)X & (sizeof (long) - 1)) ++#define UNALIGNED(X) ((uintptr_t)X & (sizeof (long) - 1)) + + /* How many bytes are loaded each iteration of the word copy loop. */ + #define LBLOCKSIZE (sizeof (long)) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strcmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcmp.c +--- newlib-1.18.0.orig/newlib/libc/string/strcmp.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcmp.c 2011-05-18 14:27:09.040560463 +0200 +@@ -35,12 +35,13 @@ + strcmp ansi pure + */ + ++#include + #include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((uintptr_t)X & (sizeof (long) - 1)) | ((uintptr_t)Y & (sizeof (long) - 1))) + + /* DETECTNULL returns nonzero if (long)X contains a NULL byte. */ + #if LONG_MAX == 2147483647L +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strcpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcpy.c +--- newlib-1.18.0.orig/newlib/libc/string/strcpy.c 2007-05-29 23:26:59.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strcpy.c 2011-05-18 14:27:09.040560463 +0200 +@@ -32,6 +32,7 @@ + strcpy ansi pure + */ + ++#include + #include + #include + +@@ -40,7 +41,7 @@ + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strlen.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strlen.c +--- newlib-1.18.0.orig/newlib/libc/string/strlen.c 2008-05-27 00:56:14.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strlen.c 2011-05-18 14:27:09.040560463 +0200 +@@ -32,11 +32,12 @@ + */ + + #include <_ansi.h> ++#include + #include + #include + + #define LBLOCKSIZE (sizeof (long)) +-#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) ++#define UNALIGNED(X) ((intptr_t)X & (LBLOCKSIZE - 1)) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strncasecmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncasecmp.c +--- newlib-1.18.0.orig/newlib/libc/string/strncasecmp.c 2009-04-23 20:11:22.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncasecmp.c 2011-05-18 14:27:09.041560478 +0200 +@@ -6,11 +6,11 @@ + strncasecmp + + ANSI_SYNOPSIS +- #include ++ #include + int strncasecmp(const char *<[a]>, const char * <[b]>, size_t <[length]>); + + TRAD_SYNOPSIS +- #include ++ #include + int strncasecmp(<[a]>, <[b]>, <[length]>) + char *<[a]>; + char *<[b]>; +@@ -40,7 +40,7 @@ + strncasecmp + */ + +-#include ++#include + #include + + int +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strncat.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncat.c +--- newlib-1.18.0.orig/newlib/libc/string/strncat.c 2005-10-28 23:21:07.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncat.c 2011-05-18 14:27:09.041560478 +0200 +@@ -42,11 +42,12 @@ + */ + + #include ++#include + #include + + /* Nonzero if X is aligned on a "long" boundary. */ + #define ALIGNED(X) \ +- (((long)X & (sizeof (long) - 1)) == 0) ++ (((intptr_t)X & (sizeof (long) - 1)) == 0) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strncmp.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncmp.c +--- newlib-1.18.0.orig/newlib/libc/string/strncmp.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncmp.c 2011-05-18 14:27:09.041560478 +0200 +@@ -36,12 +36,13 @@ + strncmp ansi pure + */ + ++#include + #include + #include + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((uintptr_t)X & (sizeof (long) - 1)) | ((uintptr_t)Y & (sizeof (long) - 1))) + + /* DETECTNULL returns nonzero if (long)X contains a NULL byte. */ + #if LONG_MAX == 2147483647L +diff -Naur newlib-1.18.0.orig/newlib/libc/string/strncpy.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncpy.c +--- newlib-1.18.0.orig/newlib/libc/string/strncpy.c 2000-02-17 20:39:48.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/strncpy.c 2011-05-18 14:27:09.041560478 +0200 +@@ -38,6 +38,7 @@ + */ + + #include ++#include + #include + + /*SUPPRESS 560*/ +@@ -45,7 +46,7 @@ + + /* Nonzero if either X or Y is not aligned on a "long" boundary. */ + #define UNALIGNED(X, Y) \ +- (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) ++ (((intptr_t)X & (sizeof (long) - 1)) | ((intptr_t)Y & (sizeof (long) - 1))) + + #if LONG_MAX == 2147483647L + #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +diff -Naur newlib-1.18.0.orig/newlib/libc/string/str-two-way.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/str-two-way.h +--- newlib-1.18.0.orig/newlib/libc/string/str-two-way.h 2008-10-02 22:12:34.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/string/str-two-way.h 2011-05-18 14:27:09.040560463 +0200 +@@ -1,5 +1,5 @@ + /* Byte-wise substring search, using the Two-Way algorithm. +- * Copyright (C) 2008 Eric Blake ++ * Copyright (C) 2008, 2010 Eric Blake + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ +@@ -335,8 +335,8 @@ + a byte out of place, there can be no match until + after the mismatch. */ + shift = needle_len - period; +- memory = 0; + } ++ memory = 0; + j += shift; + continue; + } +diff -Naur newlib-1.18.0.orig/newlib/libc/sys/rtems/crt0.c newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/crt0.c +--- newlib-1.18.0.orig/newlib/libc/sys/rtems/crt0.c 2009-12-16 19:28:14.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/crt0.c 2011-05-18 14:27:09.041560478 +0200 +@@ -24,8 +24,8 @@ + /* RTEMS provides some of its own routines including a Malloc family */ + RTEMS_STUB(void *,malloc(size_t s)) { return 0; } + RTEMS_STUB(void *,realloc(void* p, size_t s)) { return 0; } +-RTEMS_STUB(void, free(void)) { ; } +-RTEMS_STUB(_PTR, calloc(struct _reent *r, size_t s1, size_t s2)) {} ++RTEMS_STUB(void, free(void* ptr)) { ; } ++RTEMS_STUB(_PTR, calloc(size_t s1, size_t s2)) {} + + #if defined(__GNUC__) + /* +@@ -49,6 +49,7 @@ + #endif + + /* stubs for functions RTEMS provides */ ++RTEMS_STUB(int, clock_gettime(clockid_t clk_id, struct timespec *tp)) { return -1; } + RTEMS_STUB(int, close (int fd)) { return -1; } + RTEMS_STUB(int, dup2(int oldfd, int newfd)) { return -1; } + RTEMS_STUB(int, fcntl( int fd, int cmd, ... /* arg */ )) { return -1; } +@@ -56,6 +57,7 @@ + RTEMS_STUB(int, fstat(int fd, struct stat *buf)) { return -1; } + RTEMS_STUB(int, getdents(int fd, void *dp, int count)) { return -1; } + RTEMS_STUB(char *, getlogin(void)) { return 0; } ++RTEMS_STUB(int, gettimeofday(struct timeval *tv, struct timezone *tz)) { return -1; } + RTEMS_STUB(struct passwd *, getpwnam(const char *name)) { return 0; } + RTEMS_STUB(struct passwd *, getpwuid(uid_t uid)) { return 0; } + RTEMS_STUB(uid_t, getuid(void)) { return 0; } +@@ -65,6 +67,7 @@ + RTEMS_STUB(int, open(const char *pathname, int flags, int mode)) { return -1; } + RTEMS_STUB(int, pipe(int pipefd[2])) { return -1; } + RTEMS_STUB(_ssize_t, read(int fd, void *buf, size_t count)) { return -1; } ++RTEMS_STUB(int, sched_yield(void)) { return -1; } + RTEMS_STUB(int, sigfillset(sigset_t *set)) { return -1; } + RTEMS_STUB(int, sigprocmask(int how, const sigset_t *set, sigset_t *oldset)) { return -1; } + RTEMS_STUB(int, stat(const char *path, struct stat *buf)) { return -1; } +@@ -95,7 +98,7 @@ + RTEMS_STUB(int, _kill_r (struct _reent *r, int pid, int sig )) { return -1; } + #if !defined(REENTRANT_SYSCALLS_PROVIDED) + /* cf. newlib/libc/reent/linkr.c */ +-RTEMS_STUB(int, _link_r (struct _reent *, const char *, const char *)) { return -1; } ++RTEMS_STUB(int, _link_r (struct _reent *r, const char *oldpath, const char *newpath)) { return -1; } + #endif + RTEMS_STUB(_off_t, _lseek_r ( struct _reent *ptr, int fd, _off_t offset, int whence )) { return -1; } + RTEMS_STUB(int, _open_r (struct _reent *r, const char *buf, int flags, int mode)) { return -1; } +@@ -103,14 +106,14 @@ + RTEMS_STUB(int, _rename_r (struct _reent *r, const char *a, const char *b)){ return -1; } + #if !(defined (REENTRANT_SYSCALLS_PROVIDED) || defined (MALLOC_PROVIDED)) + /* cf. newlib/libc/reent/sbrkr.c */ +-RTEMS_STUB(void *,_sbrk_r (struct _reent *r, ptrdiff_t)) { return -1; } ++RTEMS_STUB(void *,_sbrk_r (struct _reent *r, ptrdiff_t addr)) { return 0; } + #endif + RTEMS_STUB(int, _stat_r (struct _reent *r, const char *path, struct stat *buf)) { return -1; } + RTEMS_STUB(_CLOCK_T_, _times_r (struct _reent *r, struct tms *ptms)) { return -1; } + RTEMS_STUB(int, _unlink_r (struct _reent *r, const char *path)) { return -1; } + #if !(defined (REENTRANT_SYSCALLS_PROVIDED) || defined (NO_EXEC)) + /* cf. newlib/libc/reent/execr.c */ +-RTEMS_STUB(int, _wait_r (struct _reent *r, int *)) { return -1; } ++RTEMS_STUB(int, _wait_r (struct _reent *r, int *status)) { return -1; } + #endif + RTEMS_STUB(_ssize_t, _write_r (struct _reent *r, int fd, const void *buf, size_t nbytes)) { return -1; } + +diff -Naur newlib-1.18.0.orig/newlib/libc/sys/rtems/include/limits.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/include/limits.h +--- newlib-1.18.0.orig/newlib/libc/sys/rtems/include/limits.h 2008-11-17 23:05:12.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/include/limits.h 2011-05-18 14:27:09.041560478 +0200 +@@ -78,7 +78,11 @@ + * Invariant values + */ + ++#if defined(__SIZEOF_SIZE_T__) && defined(__CHAR_BIT__) ++#define SSIZE_MAX ((1UL << (__SIZEOF_SIZE_T__ * __CHAR_BIT__ - 1)) - 1) ++#else /* historic fallback, wrong in most cases */ + #define SSIZE_MAX 32767 ++#endif + + /* + * Maximum Values +diff -Naur newlib-1.18.0.orig/newlib/libc/sys/rtems/machine/_types.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/machine/_types.h +--- newlib-1.18.0.orig/newlib/libc/sys/rtems/machine/_types.h 2009-12-17 17:10:41.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/machine/_types.h 2011-05-18 14:27:09.042560493 +0200 +@@ -31,4 +31,25 @@ + + typedef __int32_t blksize_t; + typedef __int32_t blkcnt_t; ++ ++/* EXPERIMENTAL: Use 64bit types */ ++#if defined(__arm__) || defined(__i386__) || defined(__m68k__) || defined(__mips__) || defined(__PPC__) || defined(__sparc__) ++/* Use 64bit types */ ++typedef __int64_t _off_t; ++#define __off_t_defined 1 ++ ++typedef __int64_t _fpos_t; ++#define __fpos_t_defined 1 ++#else ++/* Use 32bit types */ ++typedef __int32_t _off_t; ++#define __off_t_defined 1 ++ ++typedef __int32_t _fpos_t; ++#define __fpos_t_defined 1 ++#endif ++ ++typedef __uint32_t _mode_t; ++#define __mode_t_defined 1 ++ + #endif +diff -Naur newlib-1.18.0.orig/newlib/libc/sys/rtems/sys/dirent.h newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/sys/dirent.h +--- newlib-1.18.0.orig/newlib/libc/sys/rtems/sys/dirent.h 2004-01-08 20:25:21.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libc/sys/rtems/sys/dirent.h 2011-05-18 14:27:09.042560493 +0200 +@@ -31,6 +31,10 @@ + void seekdir(DIR *dir, long loc); + long telldir(DIR *dir); + ++#ifdef _COMPILING_NEWLIB ++void _seekdir(DIR *dir, long offset); ++#endif ++ + #include + + #include +diff -Naur newlib-1.18.0.orig/newlib/libm/common/fdlibm.h newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/fdlibm.h +--- newlib-1.18.0.orig/newlib/libm/common/fdlibm.h 2009-11-17 23:35:46.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/fdlibm.h 2011-05-18 14:27:09.042560493 +0200 +@@ -361,3 +361,12 @@ + sf_u.word = (i); \ + (d) = sf_u.value; \ + } while (0) ++ ++/* Macros to avoid undefined behaviour that can arise if the amount ++ of a shift is exactly equal to the size of the shifted operand. */ ++ ++#define SAFE_LEFT_SHIFT(op,amt) \ ++ (((amt) < 8 * sizeof(op)) ? ((op) << (amt)) : 0) ++ ++#define SAFE_RIGHT_SHIFT(op,amt) \ ++ (((amt) < 8 * sizeof(op)) ? ((op) >> (amt)) : 0) +diff -Naur newlib-1.18.0.orig/newlib/libm/common/modfl.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/modfl.c +--- newlib-1.18.0.orig/newlib/libm/common/modfl.c 2009-04-18 00:15:43.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/modfl.c 2011-05-18 14:27:09.042560493 +0200 +@@ -36,7 +36,7 @@ + long double + modfl (long double x, long double *iptr) + { +- return modf(x, iptr); ++ return modf(x, (double*) iptr); + } + #endif + +diff -Naur newlib-1.18.0.orig/newlib/libm/common/sf_ilogb.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_ilogb.c +--- newlib-1.18.0.orig/newlib/libm/common/sf_ilogb.c 2001-04-04 15:30:59.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_ilogb.c 2011-05-18 14:27:09.044560523 +0200 +@@ -13,8 +13,8 @@ + * ==================================================== + */ + +-#include "fdlibm.h" + #include ++#include "fdlibm.h" + + #ifdef __STDC__ + int ilogbf(float x) +@@ -28,11 +28,14 @@ + GET_FLOAT_WORD(hx,x); + hx &= 0x7fffffff; + if(FLT_UWORD_IS_ZERO(hx)) +- return - INT_MAX; /* ilogb(0) = 0x80000001 */ ++ return FP_ILOGB0; /* ilogb(0) = special case error */ + if(FLT_UWORD_IS_SUBNORMAL(hx)) { + for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1; + return ix; + } ++ #if FP_ILOGBNAN != INT_MAX ++ else if (FLT_UWORD_IS_NAN(hx)) return FP_ILOGBNAN; /* NAN */ ++ #endif + else if (!FLT_UWORD_IS_FINITE(hx)) return INT_MAX; + else return (hx>>23)-127; + } +diff -Naur newlib-1.18.0.orig/newlib/libm/common/sf_llrint.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_llrint.c +--- newlib-1.18.0.orig/newlib/libm/common/sf_llrint.c 2009-04-03 19:39:24.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_llrint.c 2011-05-18 14:27:09.044560523 +0200 +@@ -71,7 +71,7 @@ + GET_FLOAT_WORD (i0, t); + /* Detect the all-zeros representation of plus and + minus zero, which fails the calculation below. */ +- if ((i0 & ~(1 << 31)) == 0) ++ if ((i0 & ~((__uint32_t)1 << 31)) == 0) + return 0; + j0 = ((i0 >> 23) & 0xff) - 0x7f; + i0 &= 0x7fffff; +diff -Naur newlib-1.18.0.orig/newlib/libm/common/sf_log2.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_log2.c +--- newlib-1.18.0.orig/newlib/libm/common/sf_log2.c 2009-03-18 19:11:18.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_log2.c 2011-05-18 14:27:09.044560523 +0200 +@@ -30,7 +30,7 @@ + float x; + #endif + { +- return (logf(x) / (float) M_LOG2_E); ++ return (logf(x) / (float_t) M_LN2); + } + + #ifdef _DOUBLE_IS_32BITS +diff -Naur newlib-1.18.0.orig/newlib/libm/common/sf_rint.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_rint.c +--- newlib-1.18.0.orig/newlib/libm/common/sf_rint.c 2001-04-04 15:30:59.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_rint.c 2011-05-18 14:27:09.044560523 +0200 +@@ -57,7 +57,7 @@ + i = (0x007fffff)>>j0; + if((i0&i)==0) return x; /* x is integral */ + i>>=1; +- if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0); ++ if((i0&i)!=0) i0 = (i0&(~i))|((0x200000)>>j0); + } + } else { + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; /* inf or NaN */ +diff -Naur newlib-1.18.0.orig/newlib/libm/common/sf_round.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_round.c +--- newlib-1.18.0.orig/newlib/libm/common/sf_round.c 2005-02-24 20:02:35.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/sf_round.c 2011-05-18 14:27:09.044560523 +0200 +@@ -38,7 +38,7 @@ + w &= 0x80000000; + if (exponent_less_127 == -1) + /* Result is +1.0 or -1.0. */ +- w |= (127 << 23); ++ w |= ((__uint32_t)127 << 23); + } + else + { +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_ilogb.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_ilogb.c +--- newlib-1.18.0.orig/newlib/libm/common/s_ilogb.c 2003-10-20 20:46:37.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_ilogb.c 2011-05-18 14:27:09.042560493 +0200 +@@ -44,13 +44,24 @@ + RETURNS + + <> and <> return the power of two used to form the +-floating-point argument. If <[val]> is <<0>>, they return <<- +-INT_MAX>> (<> is defined in limits.h). If <[val]> is +-infinite, or NaN, they return <>. ++floating-point argument. ++If <[val]> is <<0>>, they return <>. ++If <[val]> is infinite, they return <>. ++If <[val]> is NaN, they return <>. ++(<> and <> are defined in math.h, but in turn are ++defined as INT_MIN or INT_MAX from limits.h. The value of FP_ILOGB0 may be ++either INT_MIN or -INT_MAX. The value of FP_ILOGBNAN may be either INT_MAX or ++INT_MIN.) ++ ++@comment The bugs might not be worth noting, given the mass non-C99/POSIX ++@comment behavior of much of the Newlib math library. ++@comment BUGS ++@comment On errors, errno is not set per C99 and POSIX requirements even if ++@comment (math_errhandling & MATH_ERRNO) is non-zero. + + PORTABILITY +- Neither <> nor <> is required by ANSI C or by +- the System V Interface Definition (Issue 2). */ ++C99, POSIX ++*/ + + /* ilogb(double x) + * return the binary exponent of non-zero x +@@ -58,8 +69,8 @@ + * ilogb(inf/NaN) = 0x7fffffff (no signal is raised) + */ + +-#include "fdlibm.h" + #include ++#include "fdlibm.h" + + #ifndef _DOUBLE_IS_32BITS + +@@ -76,7 +87,7 @@ + hx &= 0x7fffffff; + if(hx<0x00100000) { + if((hx|lx)==0) +- return - INT_MAX; /* ilogb(0) = 0x80000001 */ ++ return FP_ILOGB0; /* ilogb(0) = special case error */ + else /* subnormal x */ + if(hx==0) { + for (ix = -1043; lx>0; lx<<=1) ix -=1; +@@ -86,7 +97,10 @@ + return ix; + } + else if (hx<0x7ff00000) return (hx>>20)-1023; +- else return INT_MAX; ++ #if FP_ILOGBNAN != INT_MAX ++ else if (hx>0x7ff00000) return FP_ILOGBNAN; /* NAN */ ++ #endif ++ else return INT_MAX; /* infinite (or, possibly, NAN) */ + } + + #endif /* _DOUBLE_IS_32BITS */ +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_llrint.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_llrint.c +--- newlib-1.18.0.orig/newlib/libm/common/s_llrint.c 2009-04-03 19:39:24.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_llrint.c 2011-05-18 14:27:09.043560508 +0200 +@@ -61,40 +61,56 @@ + + /* Extract exponent field. */ + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; ++ /* j0 in [-1023,1024] */ + + if(j0 < 20) + { ++ /* j0 in [-1023,19] */ + if(j0 < -1) + return 0; + else + { ++ /* j0 in [0,19] */ ++ /* shift amt in [0,19] */ + w = TWO52[sx] + x; + t = w - TWO52[sx]; + GET_HIGH_WORD(i0, t); + /* Detect the all-zeros representation of plus and + minus zero, which fails the calculation below. */ +- if ((i0 & ~(1 << 31)) == 0) ++ if ((i0 & ~((__int32_t)1 << 31)) == 0) + return 0; ++ /* After round: j0 in [0,20] */ + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; ++ /* shift amt in [20,0] */ + result = i0 >> (20 - j0); + } + } + else if (j0 < (int)(8 * sizeof (long long int)) - 1) + { ++ /* 64bit return: j0 in [20,62] */ + if (j0 >= 52) ++ /* 64bit return: j0 in [52,62] */ ++ /* 64bit return: left shift amt in [32,42] */ + result = ((long long int) ((i0 & 0x000fffff) | 0x0010000) << (j0 - 20)) | ++ /* 64bit return: right shift amt in [0,10] */ + (i1 << (j0 - 52)); + else + { ++ /* 64bit return: j0 in [20,51] */ + w = TWO52[sx] + x; + t = w - TWO52[sx]; + EXTRACT_WORDS (i0, i1, t); + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; +- result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0)); ++ /* After round: ++ * 64bit return: j0 in [20,52] */ ++ /* 64bit return: left shift amt in [0,32] */ ++ /* ***64bit return: right shift amt in [32,0] */ ++ result = ((long long int) i0 << (j0 - 20)) ++ | SAFE_RIGHT_SHIFT (i1, (52 - j0)); + } + } + else +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_llround.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_llround.c +--- newlib-1.18.0.orig/newlib/libm/common/s_llround.c 2009-03-25 20:13:01.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_llround.c 2011-05-18 14:27:09.043560508 +0200 +@@ -31,8 +31,10 @@ + msw &= 0x000fffff; + msw |= 0x00100000; + ++ /* exponent_less_1023 in [-1023,1024] */ + if (exponent_less_1023 < 20) + { ++ /* exponent_less_1023 in [-1023,19] */ + if (exponent_less_1023 < 0) + { + if (exponent_less_1023 < -1) +@@ -42,20 +44,34 @@ + } + else + { ++ /* exponent_less_1023 in [0,19] */ ++ /* shift amt in [0,19] */ + msw += 0x80000 >> exponent_less_1023; ++ /* shift amt in [20,1] */ + result = msw >> (20 - exponent_less_1023); + } + } + else if (exponent_less_1023 < (8 * sizeof (long long int)) - 1) + { ++ /* 64bit longlong: exponent_less_1023 in [20,62] */ + if (exponent_less_1023 >= 52) +- result = ((long long int) msw << (exponent_less_1023 - 20)) | (lsw << (exponent_less_1023 - 52)); ++ /* 64bit longlong: exponent_less_1023 in [52,62] */ ++ /* 64bit longlong: shift amt in [32,42] */ ++ result = ((long long int) msw << (exponent_less_1023 - 20)) ++ /* 64bit longlong: shift amt in [0,10] */ ++ | (lsw << (exponent_less_1023 - 52)); + else + { +- unsigned int tmp = lsw + (0x80000000 >> (exponent_less_1023 - 20)); ++ /* 64bit longlong: exponent_less_1023 in [20,51] */ ++ unsigned int tmp = lsw ++ /* 64bit longlong: shift amt in [0,31] */ ++ + (0x80000000 >> (exponent_less_1023 - 20)); + if (tmp < lsw) + ++msw; +- result = ((long long int) msw << (exponent_less_1023 - 20)) | (tmp >> (52 - exponent_less_1023)); ++ /* 64bit longlong: shift amt in [0,31] */ ++ result = ((long long int) msw << (exponent_less_1023 - 20)) ++ /* ***64bit longlong: shift amt in [32,1] */ ++ | SAFE_RIGHT_SHIFT (tmp, (52 - exponent_less_1023)); + } + } + else +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_log2.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_log2.c +--- newlib-1.18.0.orig/newlib/libm/common/s_log2.c 2009-03-25 20:13:01.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_log2.c 2011-05-18 14:27:09.043560508 +0200 +@@ -34,8 +34,8 @@ + rather are derivatives based on <>. (Accuracy might be slightly off from + a direct calculation.) In addition to functions, they are also implemented as + macros defined in math.h: +-. #define log2(x) (log (x) / _M_LOG2_E) +-. #define log2f(x) (logf (x) / (float) _M_LOG2_E) ++. #define log2(x) (log (x) / _M_LN2) ++. #define log2f(x) (logf (x) / (float) _M_LN2) + To use the functions instead, just undefine the macros first. + + You can use the (non-ANSI) function <> to specify error +@@ -79,7 +79,7 @@ + double x; + #endif + { +- return (log(x) / M_LOG2_E); ++ return (log(x) / M_LN2); + } + + #endif /* defined(_DOUBLE_IS_32BITS) */ +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_lrint.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_lrint.c +--- newlib-1.18.0.orig/newlib/libm/common/s_lrint.c 2009-04-16 17:39:46.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_lrint.c 2011-05-18 14:27:09.043560508 +0200 +@@ -98,13 +98,17 @@ + + /* Extract exponent field. */ + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; ++ /* j0 in [-1023,1024] */ + + if(j0 < 20) + { ++ /* j0 in [-1023,19] */ + if(j0 < -1) + return 0; + else + { ++ /* j0 in [0,19] */ ++ /* shift amt in [0,19] */ + w = TWO52[sx] + x; + t = w - TWO52[sx]; + GET_HIGH_WORD(i0, t); +@@ -112,26 +116,43 @@ + minus zero, which fails the calculation below. */ + if ((i0 & ~(1L << 31)) == 0) + return 0; ++ /* After round: j0 in [0,20] */ + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; ++ /* shift amt in [20,0] */ + result = i0 >> (20 - j0); + } + } + else if (j0 < (int)(8 * sizeof (long int)) - 1) + { ++ /* 32bit return: j0 in [20,30] */ ++ /* 64bit return: j0 in [20,62] */ + if (j0 >= 52) ++ /* 64bit return: j0 in [52,62] */ ++ /* 64bit return: left shift amt in [32,42] */ + result = ((long int) ((i0 & 0x000fffff) | 0x0010000) << (j0 - 20)) | ++ /* 64bit return: right shift amt in [0,10] */ + (i1 << (j0 - 52)); + else + { ++ /* 32bit return: j0 in [20,30] */ ++ /* 64bit return: j0 in [20,51] */ + w = TWO52[sx] + x; + t = w - TWO52[sx]; + EXTRACT_WORDS (i0, i1, t); + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; +- result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0)); ++ /* After round: ++ * 32bit return: j0 in [20,31]; ++ * 64bit return: j0 in [20,52] */ ++ /* 32bit return: left shift amt in [0,11] */ ++ /* 64bit return: left shift amt in [0,32] */ ++ /* ***32bit return: right shift amt in [32,21] */ ++ /* ***64bit return: right shift amt in [32,0] */ ++ result = ((long int) i0 << (j0 - 20)) ++ | SAFE_RIGHT_SHIFT (i1, (52 - j0)); + } + } + else +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_lround.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_lround.c +--- newlib-1.18.0.orig/newlib/libm/common/s_lround.c 2009-03-25 20:13:01.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_lround.c 2011-05-18 14:27:09.043560508 +0200 +@@ -71,9 +71,10 @@ + exponent_less_1023 = ((msw & 0x7ff00000) >> 20) - 1023; + msw &= 0x000fffff; + msw |= 0x00100000; +- ++ /* exponent_less_1023 in [-1023,1024] */ + if (exponent_less_1023 < 20) + { ++ /* exponent_less_1023 in [-1023,19] */ + if (exponent_less_1023 < 0) + { + if (exponent_less_1023 < -1) +@@ -83,20 +84,39 @@ + } + else + { ++ /* exponent_less_1023 in [0,19] */ ++ /* shift amt in [0,19] */ + msw += 0x80000 >> exponent_less_1023; ++ /* shift amt in [20,1] */ + result = msw >> (20 - exponent_less_1023); + } + } + else if (exponent_less_1023 < (8 * sizeof (long int)) - 1) + { ++ /* 32bit long: exponent_less_1023 in [20,30] */ ++ /* 64bit long: exponent_less_1023 in [20,62] */ + if (exponent_less_1023 >= 52) +- result = ((long int) msw << (exponent_less_1023 - 20)) | (lsw << (exponent_less_1023 - 52)); ++ /* 64bit long: exponent_less_1023 in [52,62] */ ++ /* 64bit long: shift amt in [32,42] */ ++ result = ((long int) msw << (exponent_less_1023 - 20)) ++ /* 64bit long: shift amt in [0,10] */ ++ | (lsw << (exponent_less_1023 - 52)); + else + { +- unsigned int tmp = lsw + (0x80000000 >> (exponent_less_1023 - 20)); ++ /* 32bit long: exponent_less_1023 in [20,30] */ ++ /* 64bit long: exponent_less_1023 in [20,51] */ ++ unsigned int tmp = lsw ++ /* 32bit long: shift amt in [0,10] */ ++ /* 64bit long: shift amt in [0,31] */ ++ + (0x80000000 >> (exponent_less_1023 - 20)); + if (tmp < lsw) + ++msw; +- result = ((long int) msw << (exponent_less_1023 - 20)) | (tmp >> (52 - exponent_less_1023)); ++ /* 32bit long: shift amt in [0,10] */ ++ /* 64bit long: shift amt in [0,31] */ ++ result = ((long int) msw << (exponent_less_1023 - 20)) ++ /* ***32bit long: shift amt in [32,22] */ ++ /* ***64bit long: shift amt in [32,1] */ ++ | SAFE_RIGHT_SHIFT (tmp, (52 - exponent_less_1023)); + } + } + else +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_rint.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_rint.c +--- newlib-1.18.0.orig/newlib/libm/common/s_rint.c 2009-03-25 20:13:01.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_rint.c 2011-05-18 14:27:09.043560508 +0200 +@@ -51,6 +51,16 @@ + * rounding mode. + * Method: + * Using floating addition. ++ * Whenever a fraction is present, if the second or any following bit after ++ * the radix point is set, limit to the second radix point to avoid ++ * possible double rounding in the TWO52 +- steps (in case guard bits are ++ * used). Specifically, if have any, chop off bits past the 2nd place and ++ * set the second place. ++ * (e.g. 2.0625=0b10.0001 => 0b10.01=2.25; ++ * 2.3125=0b10.011 => 0b10.01=2.25; ++ * 1.5625= 0b1.1001 => 0b1.11=1.75; ++ * 1.9375= 0b1.1111 => 0b1.11=1.75. ++ * Pseudo-code: if(x.frac & ~0b0.10) x.frac = (x.frac & 0b0.11) | 0b0.01;). + * Exception: + * Inexact flag raised if x not equal to rint(x). + */ +@@ -81,11 +91,11 @@ + double t; + volatile double w; + EXTRACT_WORDS(i0,i1,x); +- sx = (i0>>31)&1; +- j0 = ((i0>>20)&0x7ff)-0x3ff; +- if(j0<20) { +- if(j0<0) { +- if(((i0&0x7fffffff)|i1)==0) return x; ++ sx = (i0>>31)&1; /* sign */ ++ j0 = ((i0>>20)&0x7ff)-0x3ff; /* exponent */ ++ if(j0<20) { /* no integral bits in LS part */ ++ if(j0<0) { /* x is fractional or 0 */ ++ if(((i0&0x7fffffff)|i1)==0) return x; /* x == 0 */ + i1 |= (i0&0x0fffff); + i0 &= 0xfffe0000; + i0 |= ((i1|-i1)>>12)&0x80000; +@@ -95,13 +105,14 @@ + GET_HIGH_WORD(i0,t); + SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31)); + return t; +- } else { ++ } else { /* x has integer and maybe fraction */ + i = (0x000fffff)>>j0; + if(((i0&i)|i1)==0) return x; /* x is integral */ + i>>=1; + if(((i0&i)|i1)!=0) { +- if(j0==19) i1 = 0x40000000; else +- i0 = (i0&(~i))|((0x20000)>>j0); ++ /* 2nd or any later bit after radix is set */ ++ if(j0==19) i1 = 0x80000000; else i1 = 0; ++ i0 = (i0&(~i))|((0x40000)>>j0); + } + } + } else if (j0>51) { +@@ -119,6 +130,3 @@ + } + + #endif /* _DOUBLE_IS_32BITS */ +- +- +- +diff -Naur newlib-1.18.0.orig/newlib/libm/common/s_round.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_round.c +--- newlib-1.18.0.orig/newlib/libm/common/s_round.c 2009-03-25 20:13:01.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/common/s_round.c 2011-05-18 14:27:09.044560523 +0200 +@@ -68,7 +68,7 @@ + msw &= 0x80000000; + if (exponent_less_1023 == -1) + /* Result is +1.0 or -1.0. */ +- msw |= (1023 << 20); ++ msw |= ((__int32_t)1023 << 20); + lsw = 0; + } + else +diff -Naur newlib-1.18.0.orig/newlib/libm/math/e_scalb.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/e_scalb.c +--- newlib-1.18.0.orig/newlib/libm/math/e_scalb.c 2000-02-17 20:39:51.000000000 +0100 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/e_scalb.c 2011-05-18 14:27:09.044560523 +0200 +@@ -17,6 +17,7 @@ + * should use scalbn() instead. + */ + ++#include + #include "fdlibm.h" + + #ifndef _DOUBLE_IS_32BITS +@@ -46,8 +47,17 @@ + else return x/(-fn); + } + if (rint(fn)!=fn) return (fn-fn)/(fn-fn); ++#if (INT_MAX < 65000) ++ if ( fn > (double) INT_MAX) return scalbn(x, INT_MAX); ++#else + if ( fn > 65000.0) return scalbn(x, 65000); +- if (-fn > 65000.0) return scalbn(x,-65000); ++#endif ++ ++#if (INT_MIN > -65000) ++ if (fn < (double) INT_MIN) return scalbn(x,INT_MIN); ++#else ++ if (fn < -65000.0) return scalbn(x,-65000); ++#endif + return scalbn(x,(int)fn); + #endif + } +diff -Naur newlib-1.18.0.orig/newlib/libm/math/wf_tgamma.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/wf_tgamma.c +--- newlib-1.18.0.orig/newlib/libm/math/wf_tgamma.c 2007-09-04 19:33:10.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/wf_tgamma.c 2011-05-18 14:27:09.045560538 +0200 +@@ -43,3 +43,17 @@ + return y; + #endif + } ++ ++#ifdef _DOUBLE_IS_32BITS ++ ++#ifdef __STDC__ ++ double tgamma(double x) ++#else ++ double tgamma(x) ++ double x; ++#endif ++{ ++ return (double) tgammaf((float) x); ++} ++ ++#endif /* defined(_DOUBLE_IS_32BITS) */ +diff -Naur newlib-1.18.0.orig/newlib/libm/math/w_tgamma.c newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/w_tgamma.c +--- newlib-1.18.0.orig/newlib/libm/math/w_tgamma.c 2002-06-07 23:59:56.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/libm/math/w_tgamma.c 2011-05-18 14:27:09.045560538 +0200 +@@ -17,6 +17,8 @@ + + #include "fdlibm.h" + ++#ifndef _DOUBLE_IS_32BITS ++ + #ifdef __STDC__ + double tgamma(double x) + #else +@@ -42,3 +44,5 @@ + return y; + #endif + } ++ ++#endif /* defined(_DOUBLE_IS_32BITS) */ +diff -Naur newlib-1.18.0.orig/newlib/Makefile.am newlib-1.18.0-rtems4.10-20110518/newlib/Makefile.am +--- newlib-1.18.0.orig/newlib/Makefile.am 2009-08-18 23:48:05.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/Makefile.am 2011-05-18 14:27:09.026560247 +0200 +@@ -81,7 +81,7 @@ + libc.a + endif + +-noinst_DATA = stmp-targ-include ++BUILT_SOURCES = stmp-targ-include + + toollib_DATA = $(CRT0) $(CRT1) + +diff -Naur newlib-1.18.0.orig/newlib/Makefile.in newlib-1.18.0-rtems4.10-20110518/newlib/Makefile.in +--- newlib-1.18.0.orig/newlib/Makefile.in 2009-10-21 00:43:45.000000000 +0200 ++++ newlib-1.18.0-rtems4.10-20110518/newlib/Makefile.in 2011-05-18 14:27:09.026560247 +0200 +@@ -122,7 +122,7 @@ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +-DATA = $(noinst_DATA) $(toollib_DATA) ++DATA = $(toollib_DATA) + RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive + AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ +@@ -351,7 +351,7 @@ + @USE_LIBTOOL_FALSE@toollib_LIBRARIES = libm.a \ + @USE_LIBTOOL_FALSE@ libc.a + +-noinst_DATA = stmp-targ-include ++BUILT_SOURCES = stmp-targ-include + toollib_DATA = $(CRT0) $(CRT1) + + # The functions ldexp, frexp and modf are traditionally supplied in +@@ -411,7 +411,7 @@ + + # dejagnu support + RUNTESTFLAGS = +-all: newlib.h ++all: $(BUILT_SOURCES) newlib.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + + .SUFFIXES: +@@ -725,14 +725,16 @@ + done + check-am: + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU +-check: check-recursive ++check: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) check-recursive + all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA) newlib.h + installdirs: installdirs-recursive + installdirs-am: + for dir in "$(DESTDIR)$(toollibdir)" "$(DESTDIR)$(toollibdir)" "$(DESTDIR)$(toollibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +-install: install-recursive ++install: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) install-recursive + install-exec: install-exec-recursive + install-data: install-data-recursive + uninstall: uninstall-recursive +@@ -758,6 +760,7 @@ + maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." ++ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + clean: clean-recursive + + clean-am: clean-generic clean-libtool clean-toollibLIBRARIES \ +@@ -833,8 +836,9 @@ + uninstall-am: uninstall-toollibDATA uninstall-toollibLIBRARIES \ + uninstall-toollibLTLIBRARIES + +-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check-am \ +- ctags-recursive install-am install-strip tags-recursive ++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ++ check-am ctags-recursive install install-am install-strip \ ++ tags-recursive + + .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-DEJAGNU check-am clean \ -- cgit v1.2.3