112d61fec6
This reverts commit 82ca77e8bb
.
2597 lines
87 KiB
Diff
2597 lines
87 KiB
Diff
diff -rupN _source/newlib-1.19.0/config.sub newlib-1.19.0/config.sub
|
|
--- _source/newlib-1.19.0/config.sub 2010-06-01 12:53:40.000000000 -0500
|
|
+++ newlib-1.19.0/config.sub 2011-04-24 20:37:12.000000000 -0500
|
|
@@ -1298,6 +1298,7 @@ case $os in
|
|
| -sym* | -kopensolaris* \
|
|
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
|
| -aos* | -aros* \
|
|
+ | -toaru* \
|
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
|
diff -rupN _source/newlib-1.19.0/newlib/configure.host newlib-1.19.0/newlib/configure.host
|
|
--- _source/newlib-1.19.0/newlib/configure.host 2010-12-02 13:30:46.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/configure.host 2011-04-24 20:38:10.000000000 -0500
|
|
@@ -418,6 +418,9 @@ case "${host}" in
|
|
h8500-*-elf*)
|
|
sys_dir=h8500hms
|
|
;;
|
|
+ i[34567]86-*-toaru*)
|
|
+ sys_dir=toaru
|
|
+ ;;
|
|
i[34567]86-*-rdos*)
|
|
sys_dir=rdos
|
|
newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/include/sys/stat.h newlib-1.19.0/newlib/libc/include/sys/stat.h
|
|
--- _source/newlib-1.19.0/newlib/libc/include/sys/stat.h 2010-08-06 13:26:21.000000000 -0500
|
|
+++ newlib-1.19.0/newlib/libc/include/sys/stat.h 2012-04-23 16:00:11.000000000 -0500
|
|
@@ -150,8 +150,8 @@ int _EXFUN(mkfifo,( const char *__path,
|
|
int _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
|
|
mode_t _EXFUN(umask,( mode_t __mask ));
|
|
|
|
-#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
|
|
int _EXFUN(lstat,( const char *__path, struct stat *__buf ));
|
|
+#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
|
|
int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
|
|
#endif
|
|
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/include/sys/utime.h newlib-1.19.0/newlib/libc/include/sys/utime.h
|
|
--- _source/newlib-1.19.0/newlib/libc/include/sys/utime.h 2000-02-17 13:39:46.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/libc/include/sys/utime.h 2012-04-23 16:01:17.000000000 -0500
|
|
@@ -15,6 +15,8 @@ struct utimbuf
|
|
time_t modtime;
|
|
};
|
|
|
|
+int utime(const char *filename, const struct utimbuf *times);
|
|
+
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/stdio/fseek.c newlib-1.19.0/newlib/libc/stdio/fseek.c
|
|
--- _source/newlib-1.19.0/newlib/libc/stdio/fseek.c 2009-12-17 13:43:43.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/libc/stdio/fseek.c 2011-04-29 19:33:10.000000000 -0500
|
|
@@ -160,210 +160,6 @@ _DEFUN(_fseek_r, (ptr, fp, offset, whenc
|
|
return EOF;
|
|
}
|
|
|
|
- /*
|
|
- * Change any SEEK_CUR to SEEK_SET, and check `whence' argument.
|
|
- * After this, whence is either SEEK_SET or SEEK_END.
|
|
- */
|
|
-
|
|
- switch (whence)
|
|
- {
|
|
- case SEEK_CUR:
|
|
- /*
|
|
- * In order to seek relative to the current stream offset,
|
|
- * we have to first find the current stream offset a la
|
|
- * ftell (see ftell for details).
|
|
- */
|
|
- _fflush_r (ptr, fp); /* may adjust seek offset on append stream */
|
|
- if (fp->_flags & __SOFF)
|
|
- curoff = fp->_offset;
|
|
- else
|
|
- {
|
|
- curoff = seekfn (ptr, fp->_cookie, (_fpos_t) 0, SEEK_CUR);
|
|
- if (curoff == -1L)
|
|
- {
|
|
- _funlockfile (fp);
|
|
- __sfp_lock_release ();
|
|
- return EOF;
|
|
- }
|
|
- }
|
|
- if (fp->_flags & __SRD)
|
|
- {
|
|
- curoff -= fp->_r;
|
|
- if (HASUB (fp))
|
|
- curoff -= fp->_ur;
|
|
- }
|
|
- else if (fp->_flags & __SWR && fp->_p != NULL)
|
|
- curoff += fp->_p - fp->_bf._base;
|
|
-
|
|
- offset += curoff;
|
|
- whence = SEEK_SET;
|
|
- havepos = 1;
|
|
- break;
|
|
-
|
|
- case SEEK_SET:
|
|
- case SEEK_END:
|
|
- havepos = 0;
|
|
- break;
|
|
-
|
|
- default:
|
|
- ptr->_errno = EINVAL;
|
|
- _funlockfile (fp);
|
|
- __sfp_lock_release ();
|
|
- return (EOF);
|
|
- }
|
|
-
|
|
- /*
|
|
- * Can only optimise if:
|
|
- * reading (and not reading-and-writing);
|
|
- * not unbuffered; and
|
|
- * this is a `regular' Unix file (and hence seekfn==__sseek).
|
|
- * We must check __NBF first, because it is possible to have __NBF
|
|
- * and __SOPT both set.
|
|
- */
|
|
-
|
|
- if (fp->_bf._base == NULL)
|
|
- __smakebuf_r (ptr, fp);
|
|
- if (fp->_flags & (__SWR | __SRW | __SNBF | __SNPT))
|
|
- goto dumb;
|
|
- if ((fp->_flags & __SOPT) == 0)
|
|
- {
|
|
- if (seekfn != __sseek
|
|
- || fp->_file < 0
|
|
-#ifdef __USE_INTERNAL_STAT64
|
|
- || _fstat64_r (ptr, fp->_file, &st)
|
|
-#else
|
|
- || _fstat_r (ptr, fp->_file, &st)
|
|
-#endif
|
|
- || (st.st_mode & S_IFMT) != S_IFREG)
|
|
- {
|
|
- fp->_flags |= __SNPT;
|
|
- goto dumb;
|
|
- }
|
|
-#ifdef HAVE_BLKSIZE
|
|
- fp->_blksize = st.st_blksize;
|
|
-#else
|
|
- fp->_blksize = 1024;
|
|
-#endif
|
|
- fp->_flags |= __SOPT;
|
|
- }
|
|
-
|
|
- /*
|
|
- * We are reading; we can try to optimise.
|
|
- * Figure out where we are going and where we are now.
|
|
- */
|
|
-
|
|
- if (whence == SEEK_SET)
|
|
- target = offset;
|
|
- else
|
|
- {
|
|
-#ifdef __USE_INTERNAL_STAT64
|
|
- if (_fstat64_r (ptr, fp->_file, &st))
|
|
-#else
|
|
- if (_fstat_r (ptr, fp->_file, &st))
|
|
-#endif
|
|
- goto dumb;
|
|
- target = st.st_size + offset;
|
|
- }
|
|
- if ((long)target != target)
|
|
- {
|
|
- ptr->_errno = EOVERFLOW;
|
|
- _funlockfile (fp);
|
|
- __sfp_lock_release ();
|
|
- return EOF;
|
|
- }
|
|
-
|
|
- if (!havepos)
|
|
- {
|
|
- if (fp->_flags & __SOFF)
|
|
- curoff = fp->_offset;
|
|
- else
|
|
- {
|
|
- curoff = seekfn (ptr, fp->_cookie, 0L, SEEK_CUR);
|
|
- if (curoff == POS_ERR)
|
|
- goto dumb;
|
|
- }
|
|
- curoff -= fp->_r;
|
|
- if (HASUB (fp))
|
|
- curoff -= fp->_ur;
|
|
- }
|
|
-
|
|
- /*
|
|
- * Compute the number of bytes in the input buffer (pretending
|
|
- * that any ungetc() input has been discarded). Adjust current
|
|
- * offset backwards by this count so that it represents the
|
|
- * file offset for the first byte in the current input buffer.
|
|
- */
|
|
-
|
|
- if (HASUB (fp))
|
|
- {
|
|
- curoff += fp->_r; /* kill off ungetc */
|
|
- n = fp->_up - fp->_bf._base;
|
|
- curoff -= n;
|
|
- n += fp->_ur;
|
|
- }
|
|
- else
|
|
- {
|
|
- n = fp->_p - fp->_bf._base;
|
|
- curoff -= n;
|
|
- n += fp->_r;
|
|
- }
|
|
-
|
|
- /*
|
|
- * If the target offset is within the current buffer,
|
|
- * simply adjust the pointers, clear EOF, undo ungetc(),
|
|
- * and return.
|
|
- */
|
|
-
|
|
- if (target >= curoff && target < curoff + n)
|
|
- {
|
|
- register int o = target - curoff;
|
|
-
|
|
- fp->_p = fp->_bf._base + o;
|
|
- fp->_r = n - o;
|
|
- if (HASUB (fp))
|
|
- FREEUB (ptr, fp);
|
|
- fp->_flags &= ~__SEOF;
|
|
- memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
|
|
- _funlockfile (fp);
|
|
- __sfp_lock_release ();
|
|
- return 0;
|
|
- }
|
|
-
|
|
- /*
|
|
- * The place we want to get to is not within the current buffer,
|
|
- * but we can still be kind to the kernel copyout mechanism.
|
|
- * By aligning the file offset to a block boundary, we can let
|
|
- * the kernel use the VM hardware to map pages instead of
|
|
- * copying bytes laboriously. Using a block boundary also
|
|
- * ensures that we only read one block, rather than two.
|
|
- */
|
|
-
|
|
- curoff = target & ~(fp->_blksize - 1);
|
|
- if (seekfn (ptr, fp->_cookie, curoff, SEEK_SET) == POS_ERR)
|
|
- goto dumb;
|
|
- fp->_r = 0;
|
|
- fp->_p = fp->_bf._base;
|
|
- if (HASUB (fp))
|
|
- FREEUB (ptr, fp);
|
|
- fp->_flags &= ~__SEOF;
|
|
- n = target - curoff;
|
|
- if (n)
|
|
- {
|
|
- if (__srefill_r (ptr, fp) || fp->_r < n)
|
|
- goto dumb;
|
|
- fp->_p += n;
|
|
- fp->_r -= n;
|
|
- }
|
|
- memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
|
|
- _funlockfile (fp);
|
|
- __sfp_lock_release ();
|
|
- return 0;
|
|
-
|
|
- /*
|
|
- * We get here if we cannot optimise the seek ... just
|
|
- * do it. Allow the seek function to change fp->_bf._base.
|
|
- */
|
|
-
|
|
dumb:
|
|
if (_fflush_r (ptr, fp)
|
|
|| seekfn (ptr, fp->_cookie, offset, whence) == POS_ERR)
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/stdlib/calloc.c newlib-1.19.0/newlib/libc/stdlib/calloc.c
|
|
--- _source/newlib-1.19.0/newlib/libc/stdlib/calloc.c 2008-10-31 16:08:03.000000000 -0500
|
|
+++ newlib-1.19.0/newlib/libc/stdlib/calloc.c 2012-04-23 15:45:46.000000000 -0500
|
|
@@ -57,6 +57,7 @@ Supporting OS subroutines required: <<cl
|
|
|
|
#ifndef _REENT_ONLY
|
|
|
|
+#if 0
|
|
_PTR
|
|
_DEFUN (calloc, (n, size),
|
|
size_t n _AND
|
|
@@ -64,6 +65,7 @@ _DEFUN (calloc, (n, size),
|
|
{
|
|
return _calloc_r (_REENT, n, size);
|
|
}
|
|
+#endif
|
|
|
|
#endif
|
|
#endif /* MALLOC_PROVIDED */
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/stdlib/malloc.c newlib-1.19.0/newlib/libc/stdlib/malloc.c
|
|
--- _source/newlib-1.19.0/newlib/libc/stdlib/malloc.c 2008-11-19 14:55:52.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/libc/stdlib/malloc.c 2012-04-24 16:52:45.000000000 -0500
|
|
@@ -1,227 +1,955 @@
|
|
-/* VxWorks provides its own version of malloc, and we can't use this
|
|
- one because VxWorks does not provide sbrk. So we have a hook to
|
|
- not compile this code. */
|
|
-
|
|
-/* The routines here are simple cover fns to the routines that do the real
|
|
- work (the reentrant versions). */
|
|
-/* FIXME: Does the warning below (see WARNINGS) about non-reentrancy still
|
|
- apply? A first guess would be "no", but how about reentrancy in the *same*
|
|
- thread? */
|
|
-
|
|
-#ifdef MALLOC_PROVIDED
|
|
-
|
|
-int _dummy_malloc = 1;
|
|
-
|
|
-#else
|
|
-
|
|
-/*
|
|
-FUNCTION
|
|
-<<malloc>>, <<realloc>>, <<free>>---manage memory
|
|
-
|
|
-INDEX
|
|
- malloc
|
|
-INDEX
|
|
- realloc
|
|
-INDEX
|
|
- reallocf
|
|
-INDEX
|
|
- free
|
|
-INDEX
|
|
- memalign
|
|
-INDEX
|
|
- malloc_usable_size
|
|
-INDEX
|
|
- _malloc_r
|
|
-INDEX
|
|
- _realloc_r
|
|
-INDEX
|
|
- _reallocf_r
|
|
-INDEX
|
|
- _free_r
|
|
-INDEX
|
|
- _memalign_r
|
|
-INDEX
|
|
- _malloc_usable_size_r
|
|
-
|
|
-ANSI_SYNOPSIS
|
|
- #include <stdlib.h>
|
|
- void *malloc(size_t <[nbytes]>);
|
|
- void *realloc(void *<[aptr]>, size_t <[nbytes]>);
|
|
- void *reallocf(void *<[aptr]>, size_t <[nbytes]>);
|
|
- void free(void *<[aptr]>);
|
|
-
|
|
- void *memalign(size_t <[align]>, size_t <[nbytes]>);
|
|
-
|
|
- size_t malloc_usable_size(void *<[aptr]>);
|
|
-
|
|
- void *_malloc_r(void *<[reent]>, size_t <[nbytes]>);
|
|
- void *_realloc_r(void *<[reent]>,
|
|
- void *<[aptr]>, size_t <[nbytes]>);
|
|
- void *_reallocf_r(void *<[reent]>,
|
|
- void *<[aptr]>, size_t <[nbytes]>);
|
|
- void _free_r(void *<[reent]>, void *<[aptr]>);
|
|
-
|
|
- void *_memalign_r(void *<[reent]>,
|
|
- size_t <[align]>, size_t <[nbytes]>);
|
|
-
|
|
- size_t _malloc_usable_size_r(void *<[reent]>, void *<[aptr]>);
|
|
-
|
|
-TRAD_SYNOPSIS
|
|
- #include <stdlib.h>
|
|
- char *malloc(<[nbytes]>)
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- char *realloc(<[aptr]>, <[nbytes]>)
|
|
- char *<[aptr]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- char *reallocf(<[aptr]>, <[nbytes]>)
|
|
- char *<[aptr]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- void free(<[aptr]>)
|
|
- char *<[aptr]>;
|
|
-
|
|
- char *memalign(<[align]>, <[nbytes]>)
|
|
- size_t <[align]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- size_t malloc_usable_size(<[aptr]>)
|
|
- char *<[aptr]>;
|
|
-
|
|
- char *_malloc_r(<[reent]>,<[nbytes]>)
|
|
- char *<[reent]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- char *_realloc_r(<[reent]>, <[aptr]>, <[nbytes]>)
|
|
- char *<[reent]>;
|
|
- char *<[aptr]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- char *_reallocf_r(<[reent]>, <[aptr]>, <[nbytes]>)
|
|
- char *<[reent]>;
|
|
- char *<[aptr]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- void _free_r(<[reent]>, <[aptr]>)
|
|
- char *<[reent]>;
|
|
- char *<[aptr]>;
|
|
-
|
|
- char *_memalign_r(<[reent]>, <[align]>, <[nbytes]>)
|
|
- char *<[reent]>;
|
|
- size_t <[align]>;
|
|
- size_t <[nbytes]>;
|
|
-
|
|
- size_t malloc_usable_size(<[reent]>, <[aptr]>)
|
|
- char *<[reent]>;
|
|
- char *<[aptr]>;
|
|
-
|
|
-DESCRIPTION
|
|
-These functions manage a pool of system memory.
|
|
-
|
|
-Use <<malloc>> to request allocation of an object with at least
|
|
-<[nbytes]> bytes of storage available. If the space is available,
|
|
-<<malloc>> returns a pointer to a newly allocated block as its result.
|
|
-
|
|
-If you already have a block of storage allocated by <<malloc>>, but
|
|
-you no longer need all the space allocated to it, you can make it
|
|
-smaller by calling <<realloc>> with both the object pointer and the
|
|
-new desired size as arguments. <<realloc>> guarantees that the
|
|
-contents of the smaller object match the beginning of the original object.
|
|
-
|
|
-Similarly, if you need more space for an object, use <<realloc>> to
|
|
-request the larger size; again, <<realloc>> guarantees that the
|
|
-beginning of the new, larger object matches the contents of the
|
|
-original object.
|
|
-
|
|
-When you no longer need an object originally allocated by <<malloc>>
|
|
-or <<realloc>> (or the related function <<calloc>>), return it to the
|
|
-memory storage pool by calling <<free>> with the address of the object
|
|
-as the argument. You can also use <<realloc>> for this purpose by
|
|
-calling it with <<0>> as the <[nbytes]> argument.
|
|
-
|
|
-The <<reallocf>> function behaves just like <<realloc>> except if the
|
|
-function is required to allocate new storage and this fails. In this
|
|
-case <<reallocf>> will free the original object passed in whereas
|
|
-<<realloc>> will not.
|
|
-
|
|
-The <<memalign>> function returns a block of size <[nbytes]> aligned
|
|
-to a <[align]> boundary. The <[align]> argument must be a power of
|
|
-two.
|
|
-
|
|
-The <<malloc_usable_size>> function takes a pointer to a block
|
|
-allocated by <<malloc>>. It returns the amount of space that is
|
|
-available in the block. This may or may not be more than the size
|
|
-requested from <<malloc>>, due to alignment or minimum size
|
|
-constraints.
|
|
-
|
|
-The alternate functions <<_malloc_r>>, <<_realloc_r>>, <<_reallocf_r>>,
|
|
-<<_free_r>>, <<_memalign_r>>, and <<_malloc_usable_size_r>> are reentrant
|
|
-versions. The extra argument <[reent]> is a pointer to a reentrancy structure.
|
|
-
|
|
-If you have multiple threads of execution which may call any of these
|
|
-routines, or if any of these routines may be called reentrantly, then
|
|
-you must provide implementations of the <<__malloc_lock>> and
|
|
-<<__malloc_unlock>> functions for your system. See the documentation
|
|
-for those functions.
|
|
-
|
|
-These functions operate by calling the function <<_sbrk_r>> or
|
|
-<<sbrk>>, which allocates space. You may need to provide one of these
|
|
-functions for your system. <<_sbrk_r>> is called with a positive
|
|
-value to allocate more space, and with a negative value to release
|
|
-previously allocated space if it is no longer required.
|
|
-@xref{Stubs}.
|
|
-
|
|
-RETURNS
|
|
-<<malloc>> returns a pointer to the newly allocated space, if
|
|
-successful; otherwise it returns <<NULL>>. If your application needs
|
|
-to generate empty objects, you may use <<malloc(0)>> for this purpose.
|
|
-
|
|
-<<realloc>> returns a pointer to the new block of memory, or <<NULL>>
|
|
-if a new block could not be allocated. <<NULL>> is also the result
|
|
-when you use `<<realloc(<[aptr]>,0)>>' (which has the same effect as
|
|
-`<<free(<[aptr]>)>>'). You should always check the result of
|
|
-<<realloc>>; successful reallocation is not guaranteed even when
|
|
-you request a smaller object.
|
|
-
|
|
-<<free>> does not return a result.
|
|
-
|
|
-<<memalign>> returns a pointer to the newly allocated space.
|
|
-
|
|
-<<malloc_usable_size>> returns the usable size.
|
|
-
|
|
-PORTABILITY
|
|
-<<malloc>>, <<realloc>>, and <<free>> are specified by the ANSI C
|
|
-standard, but other conforming implementations of <<malloc>> may
|
|
-behave differently when <[nbytes]> is zero.
|
|
-
|
|
-<<memalign>> is part of SVR4.
|
|
-
|
|
-<<malloc_usable_size>> is not portable.
|
|
-
|
|
-Supporting OS subroutines required: <<sbrk>>. */
|
|
-
|
|
-#include <_ansi.h>
|
|
-#include <reent.h>
|
|
-#include <stdlib.h>
|
|
-#include <malloc.h>
|
|
-
|
|
-#ifndef _REENT_ONLY
|
|
-
|
|
-_PTR
|
|
-_DEFUN (malloc, (nbytes),
|
|
- size_t nbytes) /* get a block */
|
|
-{
|
|
- return _malloc_r (_REENT, nbytes);
|
|
-}
|
|
-
|
|
-void
|
|
-_DEFUN (free, (aptr),
|
|
- _PTR aptr)
|
|
-{
|
|
- _free_r (_REENT, aptr);
|
|
-}
|
|
-
|
|
-#endif
|
|
-
|
|
-#endif /* ! defined (MALLOC_PROVIDED) */
|
|
+/*
|
|
+ * Kevin Lange's Slab Allocator
|
|
+ *
|
|
+ * Implemented for CS241, Fall 2010, machine problem 7
|
|
+ * at the University of Illinois, Urbana-Champaign.
|
|
+ *
|
|
+ * Overall competition winner for speed.
|
|
+ * Well ranked in memory usage.
|
|
+ *
|
|
+ * XXX: Modified to work withe the ToAru kernel.
|
|
+ *
|
|
+ * Copyright (c) 2010 Kevin Lange. All rights reserved.
|
|
+ *
|
|
+ * Developed by: Kevin Lange <lange7@acm.uiuc.edu>
|
|
+ * Dave Majnemer <dmajnem2@acm.uiuc.edu>
|
|
+ * Assocation for Computing Machinery
|
|
+ * University of Illinois, Urbana-Champaign
|
|
+ * http://acm.uiuc.edu
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
+ * of this software and associated documentation files (the "Software"), to
|
|
+ * deal with the Software without restriction, including without limitation the
|
|
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
+ * sell copies of the Software, and to permit persons to whom the Software is
|
|
+ * furnished to do so, subject to the following conditions:
|
|
+ * 1. Redistributions of source code must retain the above copyright notice,
|
|
+ * this list of conditions and the following disclaimers.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimers in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. Neither the names of the Association for Computing Machinery, the
|
|
+ * University of Illinois, nor the names of its contributors may be used
|
|
+ * to endorse or promote products derived from this Software without
|
|
+ * specific prior written permission.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
+ * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
+ * WITH THE SOFTWARE.
|
|
+ *
|
|
+ * ##########
|
|
+ * # README #
|
|
+ * ##########
|
|
+ *
|
|
+ * About the slab allocator
|
|
+ * """"""""""""""""""""""""
|
|
+ *
|
|
+ * This is a simple implementation of a "slab" allocator. It works by operating
|
|
+ * on "bins" of items of predefined sizes and a set of pseudo-bins of any size.
|
|
+ * When a new allocation request is made, the allocator determines if it will
|
|
+ * fit in an existing bin. If there are no bins of the correct size for a given
|
|
+ * allocation request, the allocator will make a bin and add it to a(n empty)
|
|
+ * list of available bins of that size. In this implementation, we use sizes
|
|
+ * from 4 bytes (32 bit) or 8 bytes (64-bit) to 2KB for bins, fitting a 4K page
|
|
+ * size. The implementation allows the number of pages in a single bin to be
|
|
+ * increased, as well as allowing for changing the size of page (though this
|
|
+ * should, for the most part, remain 4KB under any modern system).
|
|
+ *
|
|
+ * Special thanks
|
|
+ * """"""""""""""
|
|
+ *
|
|
+ * I would like to thank Dave Majnemer, who I have credited above as a
|
|
+ * contributor, for his assistance. Without Dave, klmalloc would be a mash
|
|
+ * up of bits of forward movement in no discernible pattern. Dave helped
|
|
+ * me ensure that I could build a proper slab allocator and has consantly
|
|
+ * derided me for not fixing the bugs and to-do items listed in the last
|
|
+ * section of this readme.
|
|
+ *
|
|
+ * GCC Function Attributes
|
|
+ * """""""""""""""""""""""
|
|
+ *
|
|
+ * A couple of GCC function attributes, designated by the __attribute__
|
|
+ * directive, are used in this code to streamline optimization.
|
|
+ * I've chosen to include a brief overview of the particular attributes
|
|
+ * I am making use of:
|
|
+ *
|
|
+ * - malloc:
|
|
+ * Tells gcc that a given function is a memory allocator
|
|
+ * and that non-NULL values it returns should never be
|
|
+ * associated with other chunks of memory. We use this for
|
|
+ * alloc, realloc and calloc, as is requested in the gcc
|
|
+ * documentation for the attribute.
|
|
+ *
|
|
+ * - always_inline:
|
|
+ * Tells gcc to always inline the given code, regardless of the
|
|
+ * optmization level. Small functions that would be noticeably
|
|
+ * slower with the overhead of paramter handling are given
|
|
+ * this attribute.
|
|
+ *
|
|
+ * - pure:
|
|
+ * Tells gcc that a function only uses inputs and its output.
|
|
+ *
|
|
+ * Things to work on
|
|
+ * """""""""""""""""
|
|
+ *
|
|
+ * TODO: Try to be more consistent on comment widths...
|
|
+ * FIXME: Make thread safe! Not necessary for competition, but would be nice.
|
|
+ * FIXME: Splitting/coalescing is broken. Fix this ASAP!
|
|
+ *
|
|
+**/
|
|
+
|
|
+#define _XOPEN_SOURCE 700
|
|
+
|
|
+/* Includes {{{ */
|
|
+#include <unistd.h>
|
|
+#include <string.h>
|
|
+#include <stdint.h>
|
|
+#include <limits.h>
|
|
+#include <assert.h>
|
|
+#include <stdio.h>
|
|
+/* }}} */
|
|
+/* Definitions {{{ */
|
|
+
|
|
+/*
|
|
+ * Defines for often-used integral values
|
|
+ * related to our binning and paging strategy.
|
|
+ */
|
|
+#define NUM_BINS 1U /* Number of bins, total, under 32-bit. */
|
|
+#define SMALLEST_BIN_LOG 2U /* Logarithm base two of the smallest bin: log_2(sizeof(int32)). */
|
|
+#define BIG_BIN (NUM_BINS - 1) /* Index for the big bin, (NUM_BINS - 1) */
|
|
+#define SMALLEST_BIN (1UL << SMALLEST_BIN_LOG) /* Size of the smallest bin. */
|
|
+
|
|
+#define PAGE_SIZE 0x1000 /* Size of a page (in bytes), should be 4KB */
|
|
+#define PAGE_MASK (PAGE_SIZE - 1) /* Block mask, size of a page * number of pages - 1. */
|
|
+#define SKIP_P INT32_MAX /* INT32_MAX is half of UINT32_MAX; this gives us a 50% marker for skip lists. */
|
|
+#define SKIP_MAX_LEVEL 6 /* We have a maximum of 6 levels in our skip lists. */
|
|
+
|
|
+/* }}} */
|
|
+
|
|
+/*
|
|
+ * Internal functions.
|
|
+ */
|
|
+static void * __attribute__ ((malloc)) klmalloc(size_t size);
|
|
+static void * __attribute__ ((malloc)) klrealloc(void * ptr, size_t size);
|
|
+static void * __attribute__ ((malloc)) klcalloc(size_t nmemb, size_t size);
|
|
+static void * __attribute__ ((malloc)) klvalloc(size_t size);
|
|
+static void klfree(void * ptr);
|
|
+
|
|
+void * __attribute__ ((malloc)) malloc(size_t size) {
|
|
+ return klmalloc(size);
|
|
+}
|
|
+
|
|
+void * __attribute__ ((malloc)) realloc(void * ptr, size_t size) {
|
|
+ return klrealloc(ptr, size);
|
|
+}
|
|
+
|
|
+void * __attribute__ ((malloc)) calloc(size_t nmemb, size_t size) {
|
|
+ return klcalloc(nmemb, size);
|
|
+}
|
|
+
|
|
+void * __attribute__ ((malloc)) valloc(size_t size) {
|
|
+ return klvalloc(size);
|
|
+}
|
|
+
|
|
+void free(void * ptr) {
|
|
+ klfree(ptr);
|
|
+}
|
|
+
|
|
+
|
|
+/* Bin management {{{ */
|
|
+
|
|
+/*
|
|
+ * Adjust bin size in bin_size call to proper bounds.
|
|
+ */
|
|
+static size_t __attribute__ ((always_inline, pure)) klmalloc_adjust_bin(size_t bin)
|
|
+{
|
|
+ if (bin <= (size_t)SMALLEST_BIN_LOG)
|
|
+ {
|
|
+ return 0;
|
|
+ }
|
|
+ bin -= SMALLEST_BIN_LOG + 1;
|
|
+ if (bin > (size_t)BIG_BIN) {
|
|
+ return BIG_BIN;
|
|
+ }
|
|
+ return bin;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Given a size value, find the correct bin
|
|
+ * to place the requested allocation in.
|
|
+ */
|
|
+static size_t __attribute__ ((always_inline, pure)) klmalloc_bin_size(size_t size) {
|
|
+ size_t bin = sizeof(size) * CHAR_BIT - __builtin_clzl(size);
|
|
+ bin += !!(size & (size - 1));
|
|
+ return klmalloc_adjust_bin(bin);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Bin header - One page of memory.
|
|
+ * Appears at the front of a bin to point to the
|
|
+ * previous bin (or NULL if the first), the next bin
|
|
+ * (or NULL if the last) and the head of the bin, which
|
|
+ * is a stack of cells of data.
|
|
+ */
|
|
+typedef struct _klmalloc_bin_header {
|
|
+ struct _klmalloc_bin_header * next; /* Pointer to the next node. */
|
|
+ void * head; /* Head of this bin. */
|
|
+ size_t size; /* Size of this bin, if big; otherwise bin index. */
|
|
+} klmalloc_bin_header;
|
|
+
|
|
+/*
|
|
+ * A big bin header is basically the same as a regular bin header
|
|
+ * only with a pointer to the previous (physically) instead of
|
|
+ * a "next" and with a list of forward headers.
|
|
+ */
|
|
+typedef struct _klmalloc_big_bin_header {
|
|
+ struct _klmalloc_big_bin_header * next;
|
|
+ void * head;
|
|
+ size_t size;
|
|
+ struct _klmalloc_big_bin_header * prev;
|
|
+ struct _klmalloc_big_bin_header * forward[SKIP_MAX_LEVEL+1];
|
|
+} klmalloc_big_bin_header;
|
|
+
|
|
+
|
|
+/*
|
|
+ * List of pages in a bin.
|
|
+ */
|
|
+typedef struct _klmalloc_bin_header_head {
|
|
+ klmalloc_bin_header * first;
|
|
+} klmalloc_bin_header_head;
|
|
+
|
|
+/*
|
|
+ * Array of available bins.
|
|
+ */
|
|
+static klmalloc_bin_header_head klmalloc_bin_head[NUM_BINS - 1]; /* Small bins */
|
|
+static struct _klmalloc_big_bins {
|
|
+ klmalloc_big_bin_header head;
|
|
+ int level;
|
|
+} klmalloc_big_bins;
|
|
+static klmalloc_big_bin_header * klmalloc_newest_big = NULL; /* Newest big bin */
|
|
+
|
|
+/* }}} Bin management */
|
|
+/* Doubly-Linked List {{{ */
|
|
+
|
|
+/*
|
|
+ * Remove an entry from a page list.
|
|
+ * Decouples the element from its
|
|
+ * position in the list by linking
|
|
+ * its neighbors to eachother.
|
|
+ */
|
|
+static void __attribute__ ((always_inline)) klmalloc_list_decouple(klmalloc_bin_header_head *head, klmalloc_bin_header *node) {
|
|
+ klmalloc_bin_header *next = node->next;
|
|
+ head->first = next;
|
|
+ node->next = NULL;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Insert an entry into a page list.
|
|
+ * The new entry is placed at the front
|
|
+ * of the list and the existing border
|
|
+ * elements are updated to point back
|
|
+ * to it (our list is doubly linked).
|
|
+ */
|
|
+static void __attribute__ ((always_inline)) klmalloc_list_insert(klmalloc_bin_header_head *head, klmalloc_bin_header *node) {
|
|
+ node->next = head->first;
|
|
+ head->first = node;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Get the head of a page list.
|
|
+ * Because redundant function calls
|
|
+ * are really great, and just in case
|
|
+ * we change the list implementation.
|
|
+ */
|
|
+static klmalloc_bin_header * __attribute__ ((always_inline)) klmalloc_list_head(klmalloc_bin_header_head *head) {
|
|
+ return head->first;
|
|
+}
|
|
+
|
|
+/* }}} Lists */
|
|
+/* Skip List {{{ */
|
|
+
|
|
+/*
|
|
+ * Skip lists are efficient
|
|
+ * data structures for storing
|
|
+ * and searching ordered data.
|
|
+ *
|
|
+ * Here, the skip lists are used
|
|
+ * to keep track of big bins.
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Generate a random value in an appropriate range.
|
|
+ * This is a xor-shift RNG.
|
|
+ */
|
|
+static uint32_t __attribute__ ((pure)) klmalloc_skip_rand() {
|
|
+ static uint32_t x = 123456789;
|
|
+ static uint32_t y = 362436069;
|
|
+ static uint32_t z = 521288629;
|
|
+ static uint32_t w = 88675123;
|
|
+
|
|
+ uint32_t t;
|
|
+
|
|
+ t = x ^ (x << 11);
|
|
+ x = y; y = z; z = w;
|
|
+ return w = w ^ (w >> 19) ^ t ^ (t >> 8);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Generate a random level for a skip node
|
|
+ */
|
|
+static int __attribute__ ((pure, always_inline)) klmalloc_random_level() {
|
|
+ int level = 0;
|
|
+ /*
|
|
+ * Keep trying to check rand() against 50% of its maximum.
|
|
+ * This provides 50%, 25%, 12.5%, etc. chance for each level.
|
|
+ */
|
|
+ while (klmalloc_skip_rand() < SKIP_P && level < SKIP_MAX_LEVEL) {
|
|
+ ++level;
|
|
+ }
|
|
+ return level;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Find best fit for a given value.
|
|
+ */
|
|
+static klmalloc_big_bin_header * klmalloc_skip_list_findbest(size_t search_size) {
|
|
+ klmalloc_big_bin_header * node = &klmalloc_big_bins.head;
|
|
+ /*
|
|
+ * Loop through the skip list until we hit something > our search value.
|
|
+ */
|
|
+ int i;
|
|
+ for (i = klmalloc_big_bins.level; i >= 0; --i) {
|
|
+ while (node->forward[i] && (node->forward[i]->size < search_size)) {
|
|
+ node = node->forward[i];
|
|
+ if (node)
|
|
+ assert((node->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ }
|
|
+ }
|
|
+ /*
|
|
+ * This value will either be NULL (we found nothing)
|
|
+ * or a node (we found a minimum fit).
|
|
+ */
|
|
+ node = node->forward[0];
|
|
+ if (node) {
|
|
+ assert((uintptr_t)node % PAGE_SIZE == 0);
|
|
+ assert((node->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ }
|
|
+ return node;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Insert a header into the skip list.
|
|
+ */
|
|
+static void klmalloc_skip_list_insert(klmalloc_big_bin_header * value) {
|
|
+ /*
|
|
+ * You better be giving me something valid to insert,
|
|
+ * or I will slit your ****ing throat.
|
|
+ */
|
|
+ assert(value != NULL);
|
|
+ assert(value->head != NULL);
|
|
+ assert((uintptr_t)value->head > (uintptr_t)value);
|
|
+ if (value->size > NUM_BINS) {
|
|
+ assert((uintptr_t)value->head < (uintptr_t)value + value->size);
|
|
+ } else {
|
|
+ assert((uintptr_t)value->head < (uintptr_t)value + PAGE_SIZE);
|
|
+ }
|
|
+ assert((uintptr_t)value % PAGE_SIZE == 0);
|
|
+ assert((value->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ assert(value->size != 0);
|
|
+
|
|
+ /*
|
|
+ * Starting from the head node of the bin locator...
|
|
+ */
|
|
+ klmalloc_big_bin_header * node = &klmalloc_big_bins.head;
|
|
+ klmalloc_big_bin_header * update[SKIP_MAX_LEVEL + 1];
|
|
+
|
|
+ /*
|
|
+ * Loop through the skiplist to find the right place
|
|
+ * to insert the node (where ->forward[] > value)
|
|
+ */
|
|
+ int i;
|
|
+ for (i = klmalloc_big_bins.level; i >= 0; --i) {
|
|
+ while (node->forward[i] && node->forward[i]->size < value->size) {
|
|
+ node = node->forward[i];
|
|
+ if (node)
|
|
+ assert((node->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ }
|
|
+ update[i] = node;
|
|
+ }
|
|
+ node = node->forward[0];
|
|
+
|
|
+ /*
|
|
+ * Make the new skip node and update
|
|
+ * the forward values.
|
|
+ */
|
|
+ if (node != value) {
|
|
+ int level = klmalloc_random_level();
|
|
+ /*
|
|
+ * Get all of the nodes before this.
|
|
+ */
|
|
+ if (level > klmalloc_big_bins.level) {
|
|
+ for (i = klmalloc_big_bins.level + 1; i <= level; ++i) {
|
|
+ update[i] = &klmalloc_big_bins.head;
|
|
+ }
|
|
+ klmalloc_big_bins.level = level;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Make the new node.
|
|
+ */
|
|
+ node = value;
|
|
+
|
|
+ /*
|
|
+ * Run through and point the preceeding nodes
|
|
+ * for each level to the new node.
|
|
+ */
|
|
+ for (i = 0; i <= level; ++i) {
|
|
+ node->forward[i] = update[i]->forward[i];
|
|
+ if (node->forward[i])
|
|
+ assert((node->forward[i]->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ update[i]->forward[i] = node;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Delete a header from the skip list.
|
|
+ * Be sure you didn't change the size, or we won't be able to find it.
|
|
+ */
|
|
+static void klmalloc_skip_list_delete(klmalloc_big_bin_header * value) {
|
|
+ /*
|
|
+ * Debug assertions
|
|
+ */
|
|
+ assert(value != NULL);
|
|
+ assert(value->head);
|
|
+ assert((uintptr_t)value->head > (uintptr_t)value);
|
|
+ if (value->size > NUM_BINS) {
|
|
+ assert((uintptr_t)value->head < (uintptr_t)value + value->size);
|
|
+ } else {
|
|
+ assert((uintptr_t)value->head < (uintptr_t)value + PAGE_SIZE);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Starting from the bin header, again...
|
|
+ */
|
|
+ klmalloc_big_bin_header * node = &klmalloc_big_bins.head;
|
|
+ klmalloc_big_bin_header * update[SKIP_MAX_LEVEL + 1];
|
|
+
|
|
+ /*
|
|
+ * Find the node.
|
|
+ */
|
|
+ int i;
|
|
+ for (i = klmalloc_big_bins.level; i >= 0; --i) {
|
|
+ while (node->forward[i] && node->forward[i]->size < value->size) {
|
|
+ node = node->forward[i];
|
|
+ if (node)
|
|
+ assert((node->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ }
|
|
+ update[i] = node;
|
|
+ }
|
|
+ node = node->forward[0];
|
|
+ while (node != value) {
|
|
+ node = node->forward[0];
|
|
+ }
|
|
+
|
|
+ if (node != value) {
|
|
+ node = klmalloc_big_bins.head.forward[0];
|
|
+ while (node->forward[0] && node->forward[0] != value) {
|
|
+ node = node->forward[0];
|
|
+ }
|
|
+ node = node->forward[0];
|
|
+ }
|
|
+ /*
|
|
+ * If we found the node, delete it;
|
|
+ * otherwise, we do nothing.
|
|
+ */
|
|
+ if (node == value) {
|
|
+ for (i = 0; i <= klmalloc_big_bins.level; ++i) {
|
|
+ if (update[i]->forward[i] != node) {
|
|
+ break;
|
|
+ }
|
|
+ update[i]->forward[i] = node->forward[i];
|
|
+ if (update[i]->forward[i]) {
|
|
+ assert((uintptr_t)(update[i]->forward[i]) % PAGE_SIZE == 0);
|
|
+ assert((update[i]->forward[i]->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ while (klmalloc_big_bins.level > 0 && klmalloc_big_bins.head.forward[klmalloc_big_bins.level] == NULL) {
|
|
+ --klmalloc_big_bins.level;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+/* }}} */
|
|
+/* Stack {{{ */
|
|
+/*
|
|
+ * Pop an item from a block.
|
|
+ * Free space is stored as a stack,
|
|
+ * so we get a free space for a bin
|
|
+ * by popping a free node from the
|
|
+ * top of the stack.
|
|
+ */
|
|
+static void * klmalloc_stack_pop(klmalloc_bin_header *header) {
|
|
+ assert(header);
|
|
+ assert(header->head != NULL);
|
|
+ assert((uintptr_t)header->head > (uintptr_t)header);
|
|
+ if (header->size > NUM_BINS) {
|
|
+ assert((uintptr_t)header->head < (uintptr_t)header + header->size);
|
|
+ } else {
|
|
+ assert((uintptr_t)header->head < (uintptr_t)header + PAGE_SIZE);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Remove the current head and point
|
|
+ * the head to where the old head pointed.
|
|
+ */
|
|
+ void *item = header->head;
|
|
+ size_t **head = header->head;
|
|
+ size_t *next = *head;
|
|
+ header->head = next;
|
|
+ return item;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Push an item into a block.
|
|
+ * When we free memory, we need
|
|
+ * to add the freed cell back
|
|
+ * into the stack of free spaces
|
|
+ * for the block.
|
|
+ */
|
|
+static void klmalloc_stack_push(klmalloc_bin_header *header, void *ptr) {
|
|
+ assert(ptr != NULL);
|
|
+ assert((uintptr_t)ptr > (uintptr_t)header);
|
|
+ if (header->size > NUM_BINS) {
|
|
+ assert((uintptr_t)ptr < (uintptr_t)header + header->size);
|
|
+ } else {
|
|
+ assert((uintptr_t)ptr < (uintptr_t)header + PAGE_SIZE);
|
|
+ }
|
|
+ size_t **item = (size_t **)ptr;
|
|
+ *item = (size_t *)header->head;
|
|
+ header->head = item;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Is this cell stack empty?
|
|
+ * If the head of the stack points
|
|
+ * to NULL, we have exhausted the
|
|
+ * stack, so there is no more free
|
|
+ * space available in the block.
|
|
+ */
|
|
+static int __attribute__ ((always_inline)) klmalloc_stack_empty(klmalloc_bin_header *header) {
|
|
+ return header->head == NULL;
|
|
+}
|
|
+
|
|
+/* }}} Stack */
|
|
+
|
|
+/* malloc() {{{ */
|
|
+static void * __attribute__ ((malloc)) klmalloc(size_t size) {
|
|
+ /*
|
|
+ * C standard implementation:
|
|
+ * If size is zero, we can choose do a number of things.
|
|
+ * This implementation will return a NULL pointer.
|
|
+ */
|
|
+ if (__builtin_expect(size == 0, 0))
|
|
+ return NULL;
|
|
+
|
|
+ /*
|
|
+ * Find the appropriate bin for the requested
|
|
+ * allocation and start looking through that list.
|
|
+ */
|
|
+ unsigned int bucket_id = klmalloc_bin_size(size);
|
|
+
|
|
+ if (bucket_id < BIG_BIN) {
|
|
+ /*
|
|
+ * Small bins.
|
|
+ */
|
|
+ klmalloc_bin_header * bin_header = klmalloc_list_head(&klmalloc_bin_head[bucket_id]);
|
|
+ if (!bin_header) {
|
|
+ /*
|
|
+ * Grow the heap for the new bin.
|
|
+ */
|
|
+ bin_header = (klmalloc_bin_header*)sbrk(PAGE_SIZE);
|
|
+ assert(bin_header != NULL);
|
|
+ assert((uintptr_t)bin_header % PAGE_SIZE == 0);
|
|
+
|
|
+ /*
|
|
+ * Set the head of the stack.
|
|
+ */
|
|
+ bin_header->head = (void*)((uintptr_t)bin_header + sizeof(klmalloc_bin_header));
|
|
+ /*
|
|
+ * Insert the new bin at the front of
|
|
+ * the list of bins for this size.
|
|
+ */
|
|
+ klmalloc_list_insert(&klmalloc_bin_head[bucket_id], bin_header);
|
|
+ /*
|
|
+ * Initialize the stack inside the bin.
|
|
+ * The stack is initially full, with each
|
|
+ * entry pointing to the next until the end
|
|
+ * which points to NULL.
|
|
+ */
|
|
+ size_t adj = SMALLEST_BIN_LOG + bucket_id;
|
|
+ size_t i, available = ((PAGE_SIZE - sizeof(klmalloc_bin_header)) >> adj) - 1;
|
|
+
|
|
+ size_t **base = bin_header->head;
|
|
+ for (i = 0; i < available; ++i) {
|
|
+ /*
|
|
+ * Our available memory is made into a stack, with each
|
|
+ * piece of memory turned into a pointer to the next
|
|
+ * available piece. When we want to get a new piece
|
|
+ * of memory from this block, we just pop off a free
|
|
+ * spot and give its address.
|
|
+ */
|
|
+ base[i << bucket_id] = (size_t *)&base[(i + 1) << bucket_id];
|
|
+ }
|
|
+ base[available << bucket_id] = NULL;
|
|
+ bin_header->size = bucket_id;
|
|
+ }
|
|
+ size_t ** item = klmalloc_stack_pop(bin_header);
|
|
+ if (klmalloc_stack_empty(bin_header)) {
|
|
+ klmalloc_list_decouple(&(klmalloc_bin_head[bucket_id]),bin_header);
|
|
+ }
|
|
+ return item;
|
|
+ } else {
|
|
+ /*
|
|
+ * Big bins.
|
|
+ */
|
|
+ klmalloc_big_bin_header * bin_header = klmalloc_skip_list_findbest(size);
|
|
+ if (bin_header) {
|
|
+ assert(bin_header->size >= size);
|
|
+ /*
|
|
+ * If we found one, delete it from the skip list
|
|
+ */
|
|
+ klmalloc_skip_list_delete(bin_header);
|
|
+ /*
|
|
+ * Retreive the head of the block.
|
|
+ */
|
|
+ size_t ** item = klmalloc_stack_pop((klmalloc_bin_header *)bin_header);
|
|
+#if 0
|
|
+ /*
|
|
+ * Resize block, if necessary
|
|
+ */
|
|
+ assert(bin_header->head == NULL);
|
|
+ size_t old_size = bin_header->size;
|
|
+ //size_t rsize = size;
|
|
+ /*
|
|
+ * Round the requeste size to our full required size.
|
|
+ */
|
|
+ size = ((size + sizeof(klmalloc_big_bin_header)) / PAGE_SIZE + 1) * PAGE_SIZE - sizeof(klmalloc_big_bin_header);
|
|
+ assert((size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ if (bin_header->size > size * 2) {
|
|
+ assert(old_size != size);
|
|
+ /*
|
|
+ * If we have extra space, start splitting.
|
|
+ */
|
|
+ bin_header->size = size;
|
|
+ assert(sbrk(0) >= bin_header->size + (uintptr_t)bin_header);
|
|
+ /*
|
|
+ * Make a new block at the end of the needed space.
|
|
+ */
|
|
+ klmalloc_big_bin_header * header_new = (klmalloc_big_bin_header *)((uintptr_t)bin_header + sizeof(klmalloc_big_bin_header) + size);
|
|
+ assert((uintptr_t)header_new % PAGE_SIZE == 0);
|
|
+ memset(header_new, 0, sizeof(klmalloc_big_bin_header) + sizeof(void *));
|
|
+ header_new->prev = bin_header;
|
|
+ if (bin_header->next) {
|
|
+ bin_header->next->prev = header_new;
|
|
+ }
|
|
+ header_new->next = bin_header->next;
|
|
+ bin_header->next = header_new;
|
|
+ if (klmalloc_newest_big == bin_header) {
|
|
+ klmalloc_newest_big = header_new;
|
|
+ }
|
|
+ header_new->size = old_size - (size + sizeof(klmalloc_big_bin_header));
|
|
+ assert(((uintptr_t)header_new->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ fprintf(stderr, "Splitting %p [now %zx] at %p [%zx] from [%zx,%zx].\n", (void*)bin_header, bin_header->size, (void*)header_new, header_new->size, old_size, size);
|
|
+ /*
|
|
+ * Free the new block.
|
|
+ */
|
|
+ klfree((void *)((uintptr_t)header_new + sizeof(klmalloc_big_bin_header)));
|
|
+ }
|
|
+#endif
|
|
+ return item;
|
|
+ } else {
|
|
+ /*
|
|
+ * Round requested size to a set of pages, plus the header size.
|
|
+ */
|
|
+ size_t pages = (size + sizeof(klmalloc_big_bin_header)) / PAGE_SIZE + 1;
|
|
+ bin_header = (klmalloc_big_bin_header*)sbrk(PAGE_SIZE * pages);
|
|
+ assert((uintptr_t)bin_header % PAGE_SIZE == 0);
|
|
+ /*
|
|
+ * Give the header the remaining space.
|
|
+ */
|
|
+ bin_header->size = pages * PAGE_SIZE - sizeof(klmalloc_big_bin_header);
|
|
+ assert((bin_header->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ /*
|
|
+ * Link the block in physical memory.
|
|
+ */
|
|
+ bin_header->prev = klmalloc_newest_big;
|
|
+ if (bin_header->prev) {
|
|
+ bin_header->prev->next = bin_header;
|
|
+ }
|
|
+ klmalloc_newest_big = bin_header;
|
|
+ bin_header->next = NULL;
|
|
+ /*
|
|
+ * Return the head of the block.
|
|
+ */
|
|
+ bin_header->head = NULL;
|
|
+ return (void*)((uintptr_t)bin_header + sizeof(klmalloc_big_bin_header));
|
|
+ }
|
|
+ }
|
|
+}
|
|
+/* }}} */
|
|
+/* free() {{{ */
|
|
+static void klfree(void *ptr) {
|
|
+ /*
|
|
+ * C standard implementation: Do nothing when NULL is passed to free.
|
|
+ */
|
|
+ if (__builtin_expect(ptr == NULL, 0)) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Woah, woah, hold on, was this a page-aligned block?
|
|
+ */
|
|
+ if ((uintptr_t)ptr % PAGE_SIZE == 0) {
|
|
+ /*
|
|
+ * Well howdy-do, it was.
|
|
+ */
|
|
+ ptr = (void *)((uintptr_t)ptr - 1);
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Get our pointer to the head of this block by
|
|
+ * page aligning it.
|
|
+ */
|
|
+ klmalloc_bin_header * header = (klmalloc_bin_header *)((uintptr_t)ptr & (size_t)~PAGE_MASK);
|
|
+ assert((uintptr_t)header % PAGE_SIZE == 0);
|
|
+
|
|
+ /*
|
|
+ * For small bins, the bin number is stored in the size
|
|
+ * field of the header. For large bins, the actual size
|
|
+ * available in the bin is stored in this field. It's
|
|
+ * easy to tell which is which, though.
|
|
+ */
|
|
+ size_t bucket_id = header->size;
|
|
+ if (bucket_id > (size_t)NUM_BINS) {
|
|
+ bucket_id = BIG_BIN;
|
|
+ klmalloc_big_bin_header *bheader = (klmalloc_big_bin_header*)header;
|
|
+
|
|
+ assert(bheader);
|
|
+ assert(bheader->head == NULL);
|
|
+ assert((bheader->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ /*
|
|
+ * Coalesce forward blocks into us.
|
|
+ */
|
|
+#if 0
|
|
+ if (bheader != klmalloc_newest_big) {
|
|
+ /*
|
|
+ * If we are not the newest big bin, there is most definitely
|
|
+ * something in front of us that we can read.
|
|
+ */
|
|
+ assert((bheader->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ klmalloc_big_bin_header * next = (void *)((uintptr_t)bheader + sizeof(klmalloc_big_bin_header) + bheader->size);
|
|
+ assert((uintptr_t)next % PAGE_SIZE == 0);
|
|
+ if (next == bheader->next && next->head) { //next->size > NUM_BINS && next->head) {
|
|
+ /*
|
|
+ * If that something is an available big bin, we can
|
|
+ * coalesce it into us to form one larger bin.
|
|
+ */
|
|
+
|
|
+ // XXX
|
|
+ size_t old_size = bheader->size;
|
|
+ // XXX
|
|
+
|
|
+ klmalloc_skip_list_delete(next);
|
|
+ bheader->size = (size_t)bheader->size + (size_t)sizeof(klmalloc_big_bin_header) + next->size;
|
|
+ assert((bheader->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+
|
|
+ if (next == klmalloc_newest_big) {
|
|
+ /*
|
|
+ * If the guy in front of us was the newest,
|
|
+ * we are now the newest (as we are him).
|
|
+ */
|
|
+ klmalloc_newest_big = bheader;
|
|
+ } else {
|
|
+ if (next->next) {
|
|
+ next->next->prev = bheader;
|
|
+ }
|
|
+ }
|
|
+ fprintf(stderr,"Coelesced (forwards) %p [%zx] <- %p [%zx] = %zx\n", (void*)bheader, old_size, (void*)next, next->size, bheader->size);
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+ /*
|
|
+ * Coalesce backwards
|
|
+ */
|
|
+#if 0
|
|
+ if (bheader->prev && bheader->prev->head) {
|
|
+ /*
|
|
+ * If there is something behind us, it is available, and there is nothing between
|
|
+ * it and us, we can coalesce ourselves into it to form a big block.
|
|
+ */
|
|
+ if ((uintptr_t)bheader->prev + (bheader->prev->size + sizeof(klmalloc_big_bin_header)) == (uintptr_t)bheader) {
|
|
+
|
|
+ size_t old_size = bheader->prev->size;
|
|
+
|
|
+ klmalloc_skip_list_delete(bheader->prev);
|
|
+ bheader->prev->size = (size_t)bheader->prev->size + (size_t)bheader->size + sizeof(klmalloc_big_bin_header);
|
|
+ assert((bheader->prev->size + sizeof(klmalloc_big_bin_header)) % PAGE_SIZE == 0);
|
|
+ klmalloc_skip_list_insert(bheader->prev);
|
|
+ if (klmalloc_newest_big == bheader) {
|
|
+ klmalloc_newest_big = bheader->prev;
|
|
+ } else {
|
|
+ if (bheader->next) {
|
|
+ bheader->next->prev = bheader->prev;
|
|
+ }
|
|
+ }
|
|
+ fprintf(stderr,"Coelesced (backwards) %p [%zx] <- %p [%zx] = %zx\n", (void*)bheader->prev, old_size, (void*)bheader, bheader->size, bheader->size);
|
|
+ /*
|
|
+ * If we coalesced backwards, we are done.
|
|
+ */
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+ /*
|
|
+ * Push new space back into the stack.
|
|
+ */
|
|
+ klmalloc_stack_push((klmalloc_bin_header *)bheader, (void *)((uintptr_t)bheader + sizeof(klmalloc_big_bin_header)));
|
|
+ assert(bheader->head != NULL);
|
|
+ /*
|
|
+ * Insert the block into list of available slabs.
|
|
+ */
|
|
+ klmalloc_skip_list_insert(bheader);
|
|
+ } else {
|
|
+ /*
|
|
+ * If the stack is empty, we are freeing
|
|
+ * a block from a previously full bin.
|
|
+ * Return it to the busy bins list.
|
|
+ */
|
|
+ if (klmalloc_stack_empty(header)) {
|
|
+ klmalloc_list_insert(&klmalloc_bin_head[bucket_id], header);
|
|
+ }
|
|
+ /*
|
|
+ * Push new space back into the stack.
|
|
+ */
|
|
+ klmalloc_stack_push(header, ptr);
|
|
+ }
|
|
+}
|
|
+/* }}} */
|
|
+/* valloc() {{{ */
|
|
+static void * __attribute__ ((malloc)) klvalloc(size_t size) {
|
|
+ /*
|
|
+ * Allocate a page-aligned block.
|
|
+ * XXX: THIS IS HORRIBLY, HORRIBLY WASTEFUL!! ONLY USE THIS
|
|
+ * IF YOU KNOW WHAT YOU ARE DOING!
|
|
+ */
|
|
+ size_t true_size = size + PAGE_SIZE - sizeof(klmalloc_big_bin_header); /* Here we go... */
|
|
+ void * result = klmalloc(true_size);
|
|
+ return (void *)((uintptr_t)result + (PAGE_SIZE - sizeof(klmalloc_big_bin_header)));
|
|
+}
|
|
+/* }}} */
|
|
+/* realloc() {{{ */
|
|
+static void * __attribute__ ((malloc)) klrealloc(void *ptr, size_t size) {
|
|
+ /*
|
|
+ * C standard implementation: When NULL is passed to realloc,
|
|
+ * simply malloc the requested size and return a pointer to that.
|
|
+ */
|
|
+ if (__builtin_expect(ptr == NULL, 0))
|
|
+ return malloc(size);
|
|
+
|
|
+ /*
|
|
+ * C standard implementation: For a size of zero, free the
|
|
+ * pointer and return NULL, allocating no new memory.
|
|
+ */
|
|
+ if (__builtin_expect(size == 0, 0))
|
|
+ {
|
|
+ free(ptr);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Find the bin for the given pointer
|
|
+ * by aligning it to a page.
|
|
+ */
|
|
+ klmalloc_bin_header * header_old = (void *)((uintptr_t)ptr & (size_t)~PAGE_MASK);
|
|
+
|
|
+
|
|
+ /*
|
|
+ * (This will only happen for a big bin, mathematically speaking)
|
|
+ * If we still have room in our bin for the additonal space,
|
|
+ * we don't need to do anything.
|
|
+ */
|
|
+ if (header_old->size >= size) {
|
|
+
|
|
+ /*
|
|
+ * TODO: Break apart blocks here, which is far more important
|
|
+ * than breaking them up on allocations.
|
|
+ */
|
|
+ return ptr;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Reallocate more memory.
|
|
+ */
|
|
+ void * newptr = klmalloc(size);
|
|
+ if (__builtin_expect(newptr != NULL, 1)) {
|
|
+ size_t old_size = header_old->size;
|
|
+ if (old_size < (size_t)BIG_BIN) {
|
|
+ /*
|
|
+ * If we are copying from a small bin,
|
|
+ * we need to get the size of the bin
|
|
+ * from its id.
|
|
+ */
|
|
+ old_size = (1UL << (SMALLEST_BIN_LOG + old_size));
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Copy the old value into the new value.
|
|
+ * Be sure to only copy as much as was in
|
|
+ * the old block.
|
|
+ */
|
|
+ memcpy(newptr, ptr, old_size);
|
|
+ klfree(ptr);
|
|
+ return newptr;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * We failed to allocate more memory,
|
|
+ * which means we're probably out.
|
|
+ *
|
|
+ * Bail and return NULL.
|
|
+ */
|
|
+ return NULL;
|
|
+}
|
|
+/* }}} */
|
|
+/* calloc() {{{ */
|
|
+static void * __attribute__ ((malloc)) klcalloc(size_t nmemb, size_t size) {
|
|
+ /*
|
|
+ * Allocate memory and zero it before returning
|
|
+ * a pointer to the newly allocated memory.
|
|
+ *
|
|
+ * Implemented by way of a simple malloc followed
|
|
+ * by a memset to 0x00 across the length of the
|
|
+ * requested memory chunk.
|
|
+ */
|
|
+
|
|
+ fprintf(stderr,"Oh, what a rare oddity this is. Someone has called calloc.\n");
|
|
+
|
|
+ void *ptr = klmalloc(nmemb * size);
|
|
+ if (__builtin_expect(ptr != NULL, 1))
|
|
+ memset(ptr,0x00,nmemb * size);
|
|
+ return ptr;
|
|
+}
|
|
+/* }}} */
|
|
+
|
|
+
|
|
+/*
|
|
+ * vim:noexpandtab
|
|
+ * vim:tabstop=4
|
|
+ * vim:shiftwidth=4
|
|
+ */
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/stdlib/mallocr.c newlib-1.19.0/newlib/libc/stdlib/mallocr.c
|
|
--- _source/newlib-1.19.0/newlib/libc/stdlib/mallocr.c 2010-05-31 14:15:41.000000000 -0500
|
|
+++ newlib-1.19.0/newlib/libc/stdlib/mallocr.c 2011-04-30 21:28:46.000000000 -0500
|
|
@@ -609,8 +609,11 @@ do {
|
|
operating system immediately after a free().
|
|
*/
|
|
|
|
+#define HAVE_MMAP 0
|
|
+#define HAVE_MREMAP 0
|
|
+
|
|
#ifndef HAVE_MMAP
|
|
-#define HAVE_MMAP 1
|
|
+#define HAVE_MMAP 0
|
|
#endif
|
|
|
|
/*
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/sys/configure newlib-1.19.0/newlib/libc/sys/configure
|
|
--- _source/newlib-1.19.0/newlib/libc/sys/configure 2010-12-16 15:59:03.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/libc/sys/configure 2011-04-24 20:39:58.000000000 -0500
|
|
@@ -1,11 +1,11 @@
|
|
#! /bin/sh
|
|
# Guess values for system-dependent variables and create Makefiles.
|
|
-# Generated by GNU Autoconf 2.65 for newlib 1.19.0.
|
|
+# Generated by GNU Autoconf 2.67 for newlib 1.19.0.
|
|
#
|
|
#
|
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
|
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
|
-# Inc.
|
|
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
|
|
+# Foundation, Inc.
|
|
#
|
|
#
|
|
# This configure script is free software; the Free Software Foundation
|
|
@@ -324,7 +324,7 @@ $as_echo X"$as_dir" |
|
|
test -d "$as_dir" && break
|
|
done
|
|
test -z "$as_dirs" || eval "mkdir $as_dirs"
|
|
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
|
|
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
|
|
|
|
|
|
} # as_fn_mkdir_p
|
|
@@ -364,19 +364,19 @@ else
|
|
fi # as_fn_arith
|
|
|
|
|
|
-# as_fn_error ERROR [LINENO LOG_FD]
|
|
-# ---------------------------------
|
|
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
|
|
+# ----------------------------------------
|
|
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
|
|
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
|
|
-# script with status $?, using 1 if that was 0.
|
|
+# script with STATUS, using 1 if that was 0.
|
|
as_fn_error ()
|
|
{
|
|
- as_status=$?; test $as_status -eq 0 && as_status=1
|
|
- if test "$3"; then
|
|
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
|
|
+ as_status=$1; test $as_status -eq 0 && as_status=1
|
|
+ if test "$4"; then
|
|
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
|
|
fi
|
|
- $as_echo "$as_me: error: $1" >&2
|
|
+ $as_echo "$as_me: error: $2" >&2
|
|
as_fn_exit $as_status
|
|
} # as_fn_error
|
|
|
|
@@ -540,7 +540,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null
|
|
exec 6>&1
|
|
|
|
# Name of the host.
|
|
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
|
|
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
|
|
# so uname gets run too.
|
|
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
|
|
|
|
@@ -798,6 +798,7 @@ sysvi386
|
|
sysvnecv70
|
|
tic80
|
|
w65
|
|
+toaru
|
|
z8ksim'
|
|
|
|
# Initialize some variables set by options.
|
|
@@ -860,8 +861,9 @@ do
|
|
fi
|
|
|
|
case $ac_option in
|
|
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
|
|
- *) ac_optarg=yes ;;
|
|
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
|
|
+ *=) ac_optarg= ;;
|
|
+ *) ac_optarg=yes ;;
|
|
esac
|
|
|
|
# Accept the important Cygnus configure options, so we can diagnose typos.
|
|
@@ -906,7 +908,7 @@ do
|
|
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
|
|
# Reject names that are not valid shell variable names.
|
|
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
|
|
- as_fn_error "invalid feature name: $ac_useropt"
|
|
+ as_fn_error $? "invalid feature name: $ac_useropt"
|
|
ac_useropt_orig=$ac_useropt
|
|
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
|
|
case $ac_user_opts in
|
|
@@ -932,7 +934,7 @@ do
|
|
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
|
|
# Reject names that are not valid shell variable names.
|
|
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
|
|
- as_fn_error "invalid feature name: $ac_useropt"
|
|
+ as_fn_error $? "invalid feature name: $ac_useropt"
|
|
ac_useropt_orig=$ac_useropt
|
|
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
|
|
case $ac_user_opts in
|
|
@@ -1136,7 +1138,7 @@ do
|
|
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
|
|
# Reject names that are not valid shell variable names.
|
|
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
|
|
- as_fn_error "invalid package name: $ac_useropt"
|
|
+ as_fn_error $? "invalid package name: $ac_useropt"
|
|
ac_useropt_orig=$ac_useropt
|
|
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
|
|
case $ac_user_opts in
|
|
@@ -1152,7 +1154,7 @@ do
|
|
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
|
|
# Reject names that are not valid shell variable names.
|
|
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
|
|
- as_fn_error "invalid package name: $ac_useropt"
|
|
+ as_fn_error $? "invalid package name: $ac_useropt"
|
|
ac_useropt_orig=$ac_useropt
|
|
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
|
|
case $ac_user_opts in
|
|
@@ -1182,8 +1184,8 @@ do
|
|
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
|
|
x_libraries=$ac_optarg ;;
|
|
|
|
- -*) as_fn_error "unrecognized option: \`$ac_option'
|
|
-Try \`$0 --help' for more information."
|
|
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
|
|
+Try \`$0 --help' for more information"
|
|
;;
|
|
|
|
*=*)
|
|
@@ -1191,7 +1193,7 @@ Try \`$0 --help' for more information."
|
|
# Reject names that are not valid shell variable names.
|
|
case $ac_envvar in #(
|
|
'' | [0-9]* | *[!_$as_cr_alnum]* )
|
|
- as_fn_error "invalid variable name: \`$ac_envvar'" ;;
|
|
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
|
|
esac
|
|
eval $ac_envvar=\$ac_optarg
|
|
export $ac_envvar ;;
|
|
@@ -1209,13 +1211,13 @@ done
|
|
|
|
if test -n "$ac_prev"; then
|
|
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
|
|
- as_fn_error "missing argument to $ac_option"
|
|
+ as_fn_error $? "missing argument to $ac_option"
|
|
fi
|
|
|
|
if test -n "$ac_unrecognized_opts"; then
|
|
case $enable_option_checking in
|
|
no) ;;
|
|
- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
|
|
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
|
|
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
|
|
esac
|
|
fi
|
|
@@ -1238,7 +1240,7 @@ do
|
|
[\\/$]* | ?:[\\/]* ) continue;;
|
|
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
|
|
esac
|
|
- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
|
|
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
|
|
done
|
|
|
|
# There might be people who depend on the old broken behavior: `$host'
|
|
@@ -1252,8 +1254,8 @@ target=$target_alias
|
|
if test "x$host_alias" != x; then
|
|
if test "x$build_alias" = x; then
|
|
cross_compiling=maybe
|
|
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
|
|
- If a cross compiler is detected then cross compile mode will be used." >&2
|
|
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
|
|
+ If a cross compiler is detected then cross compile mode will be used" >&2
|
|
elif test "x$build_alias" != "x$host_alias"; then
|
|
cross_compiling=yes
|
|
fi
|
|
@@ -1268,9 +1270,9 @@ test "$silent" = yes && exec 6>/dev/null
|
|
ac_pwd=`pwd` && test -n "$ac_pwd" &&
|
|
ac_ls_di=`ls -di .` &&
|
|
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
|
|
- as_fn_error "working directory cannot be determined"
|
|
+ as_fn_error $? "working directory cannot be determined"
|
|
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
|
|
- as_fn_error "pwd does not report name of working directory"
|
|
+ as_fn_error $? "pwd does not report name of working directory"
|
|
|
|
|
|
# Find the source files, if location was not specified.
|
|
@@ -1309,11 +1311,11 @@ else
|
|
fi
|
|
if test ! -r "$srcdir/$ac_unique_file"; then
|
|
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
|
|
- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
|
|
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
|
|
fi
|
|
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
|
|
ac_abs_confdir=`(
|
|
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
|
|
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
|
|
pwd)`
|
|
# When building in place, set srcdir=.
|
|
if test "$ac_abs_confdir" = "$ac_pwd"; then
|
|
@@ -1353,7 +1355,7 @@ Configuration:
|
|
--help=short display options specific to this package
|
|
--help=recursive display the short help of all the included packages
|
|
-V, --version display version information and exit
|
|
- -q, --quiet, --silent do not print \`checking...' messages
|
|
+ -q, --quiet, --silent do not print \`checking ...' messages
|
|
--cache-file=FILE cache test results in FILE [disabled]
|
|
-C, --config-cache alias for \`--cache-file=config.cache'
|
|
-n, --no-create do not create output files
|
|
@@ -1521,9 +1523,9 @@ test -n "$ac_init_help" && exit $ac_stat
|
|
if $ac_init_version; then
|
|
cat <<\_ACEOF
|
|
newlib configure 1.19.0
|
|
-generated by GNU Autoconf 2.65
|
|
+generated by GNU Autoconf 2.67
|
|
|
|
-Copyright (C) 2009 Free Software Foundation, Inc.
|
|
+Copyright (C) 2010 Free Software Foundation, Inc.
|
|
This configure script is free software; the Free Software Foundation
|
|
gives unlimited permission to copy, distribute and modify it.
|
|
_ACEOF
|
|
@@ -1627,7 +1629,7 @@ ac_fn_c_check_header_compile ()
|
|
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
|
$as_echo_n "checking for $2... " >&6; }
|
|
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
+if eval "test \"\${$3+set}\"" = set; then :
|
|
$as_echo_n "(cached) " >&6
|
|
else
|
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
@@ -1670,7 +1672,7 @@ $as_echo "$ac_try_echo"; } >&5
|
|
mv -f conftest.er1 conftest.err
|
|
fi
|
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
|
- test $ac_status = 0; } >/dev/null && {
|
|
+ test $ac_status = 0; } > conftest.i && {
|
|
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
|
|
test ! -s conftest.err
|
|
}; then :
|
|
@@ -1736,7 +1738,7 @@ ac_fn_c_check_func ()
|
|
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
|
$as_echo_n "checking for $2... " >&6; }
|
|
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
+if eval "test \"\${$3+set}\"" = set; then :
|
|
$as_echo_n "(cached) " >&6
|
|
else
|
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
@@ -1799,7 +1801,7 @@ This file contains any messages produced
|
|
running configure, to aid debugging if configure makes a mistake.
|
|
|
|
It was created by newlib $as_me 1.19.0, which was
|
|
-generated by GNU Autoconf 2.65. Invocation command line was
|
|
+generated by GNU Autoconf 2.67. Invocation command line was
|
|
|
|
$ $0 $@
|
|
|
|
@@ -1909,11 +1911,9 @@ trap 'exit_status=$?
|
|
{
|
|
echo
|
|
|
|
- cat <<\_ASBOX
|
|
-## ---------------- ##
|
|
+ $as_echo "## ---------------- ##
|
|
## Cache variables. ##
|
|
-## ---------------- ##
|
|
-_ASBOX
|
|
+## ---------------- ##"
|
|
echo
|
|
# The following way of writing the cache mishandles newlines in values,
|
|
(
|
|
@@ -1947,11 +1947,9 @@ $as_echo "$as_me: WARNING: cache variabl
|
|
)
|
|
echo
|
|
|
|
- cat <<\_ASBOX
|
|
-## ----------------- ##
|
|
+ $as_echo "## ----------------- ##
|
|
## Output variables. ##
|
|
-## ----------------- ##
|
|
-_ASBOX
|
|
+## ----------------- ##"
|
|
echo
|
|
for ac_var in $ac_subst_vars
|
|
do
|
|
@@ -1964,11 +1962,9 @@ _ASBOX
|
|
echo
|
|
|
|
if test -n "$ac_subst_files"; then
|
|
- cat <<\_ASBOX
|
|
-## ------------------- ##
|
|
+ $as_echo "## ------------------- ##
|
|
## File substitutions. ##
|
|
-## ------------------- ##
|
|
-_ASBOX
|
|
+## ------------------- ##"
|
|
echo
|
|
for ac_var in $ac_subst_files
|
|
do
|
|
@@ -1982,11 +1978,9 @@ _ASBOX
|
|
fi
|
|
|
|
if test -s confdefs.h; then
|
|
- cat <<\_ASBOX
|
|
-## ----------- ##
|
|
+ $as_echo "## ----------- ##
|
|
## confdefs.h. ##
|
|
-## ----------- ##
|
|
-_ASBOX
|
|
+## ----------- ##"
|
|
echo
|
|
cat confdefs.h
|
|
echo
|
|
@@ -2041,7 +2035,12 @@ _ACEOF
|
|
ac_site_file1=NONE
|
|
ac_site_file2=NONE
|
|
if test -n "$CONFIG_SITE"; then
|
|
- ac_site_file1=$CONFIG_SITE
|
|
+ # We do not want a PATH search for config.site.
|
|
+ case $CONFIG_SITE in #((
|
|
+ -*) ac_site_file1=./$CONFIG_SITE;;
|
|
+ */*) ac_site_file1=$CONFIG_SITE;;
|
|
+ *) ac_site_file1=./$CONFIG_SITE;;
|
|
+ esac
|
|
elif test "x$prefix" != xNONE; then
|
|
ac_site_file1=$prefix/share/config.site
|
|
ac_site_file2=$prefix/etc/config.site
|
|
@@ -2056,7 +2055,11 @@ do
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
|
|
$as_echo "$as_me: loading site script $ac_site_file" >&6;}
|
|
sed 's/^/| /' "$ac_site_file" >&5
|
|
- . "$ac_site_file"
|
|
+ . "$ac_site_file" \
|
|
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
+as_fn_error $? "failed to load site script $ac_site_file
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
fi
|
|
done
|
|
|
|
@@ -2132,7 +2135,7 @@ if $ac_cache_corrupted; then
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
|
|
$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
|
|
- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
|
|
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
|
|
fi
|
|
## -------------------- ##
|
|
## Main body of script. ##
|
|
@@ -2149,16 +2152,22 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
|
|
ac_aux_dir=
|
|
for ac_dir in ../../.. "$srcdir"/../../..; do
|
|
- for ac_t in install-sh install.sh shtool; do
|
|
- if test -f "$ac_dir/$ac_t"; then
|
|
- ac_aux_dir=$ac_dir
|
|
- ac_install_sh="$ac_aux_dir/$ac_t -c"
|
|
- break 2
|
|
- fi
|
|
- done
|
|
+ if test -f "$ac_dir/install-sh"; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/install-sh -c"
|
|
+ break
|
|
+ elif test -f "$ac_dir/install.sh"; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/install.sh -c"
|
|
+ break
|
|
+ elif test -f "$ac_dir/shtool"; then
|
|
+ ac_aux_dir=$ac_dir
|
|
+ ac_install_sh="$ac_aux_dir/shtool install -c"
|
|
+ break
|
|
+ fi
|
|
done
|
|
if test -z "$ac_aux_dir"; then
|
|
- as_fn_error "cannot find install-sh, install.sh, or shtool in ../../.. \"$srcdir\"/../../.." "$LINENO" 5
|
|
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../../.. \"$srcdir\"/../../.." "$LINENO" 5
|
|
fi
|
|
|
|
# These three variables are undocumented and unsupported,
|
|
@@ -2174,7 +2183,7 @@ ac_configure="$SHELL $ac_aux_dir/configu
|
|
|
|
# Make sure we can run config.sub.
|
|
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
|
|
- as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
|
|
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
|
|
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
|
|
$as_echo_n "checking build system type... " >&6; }
|
|
@@ -2185,16 +2194,16 @@ else
|
|
test "x$ac_build_alias" = x &&
|
|
ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
|
|
test "x$ac_build_alias" = x &&
|
|
- as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
|
|
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
|
|
ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
|
|
- as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
|
|
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
|
|
|
|
fi
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
|
|
$as_echo "$ac_cv_build" >&6; }
|
|
case $ac_cv_build in
|
|
*-*-*) ;;
|
|
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
|
|
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
|
|
esac
|
|
build=$ac_cv_build
|
|
ac_save_IFS=$IFS; IFS='-'
|
|
@@ -2219,7 +2228,7 @@ else
|
|
ac_cv_host=$ac_cv_build
|
|
else
|
|
ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
|
|
- as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
|
|
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
|
|
fi
|
|
|
|
fi
|
|
@@ -2227,7 +2236,7 @@ fi
|
|
$as_echo "$ac_cv_host" >&6; }
|
|
case $ac_cv_host in
|
|
*-*-*) ;;
|
|
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
|
|
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
|
|
esac
|
|
host=$ac_cv_host
|
|
ac_save_IFS=$IFS; IFS='-'
|
|
@@ -2349,11 +2358,11 @@ am_lf='
|
|
'
|
|
case `pwd` in
|
|
*[\\\"\#\$\&\'\`$am_lf]*)
|
|
- as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
|
|
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
|
|
esac
|
|
case $srcdir in
|
|
*[\\\"\#\$\&\'\`$am_lf\ \ ]*)
|
|
- as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
|
|
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
|
|
esac
|
|
|
|
# Do `set' in a subshell so we don't clobber the current shell's
|
|
@@ -2375,7 +2384,7 @@ if (
|
|
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
|
# broken ls alias from the environment. This has actually
|
|
# happened. Such a system could not be considered "sane".
|
|
- as_fn_error "ls -t appears to fail. Make sure there is not a broken
|
|
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
|
|
alias in your environment" "$LINENO" 5
|
|
fi
|
|
|
|
@@ -2385,7 +2394,7 @@ then
|
|
# Ok.
|
|
:
|
|
else
|
|
- as_fn_error "newly created file is older than distributed files!
|
|
+ as_fn_error $? "newly created file is older than distributed files!
|
|
Check your system clock" "$LINENO" 5
|
|
fi
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
|
@@ -2623,7 +2632,7 @@ done
|
|
$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
|
|
set x ${MAKE-make}
|
|
ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
|
|
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
|
|
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
|
|
$as_echo_n "(cached) " >&6
|
|
else
|
|
cat >conftest.make <<\_ACEOF
|
|
@@ -2631,7 +2640,7 @@ SHELL = /bin/sh
|
|
all:
|
|
@echo '@@@%%%=$(MAKE)=@@@%%%'
|
|
_ACEOF
|
|
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
|
|
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
|
|
case `${MAKE-make} -f conftest.make 2>/dev/null` in
|
|
*@@@%%%=?*=@@@%%%*)
|
|
eval ac_cv_prog_make_${ac_make}_set=yes;;
|
|
@@ -2727,7 +2736,7 @@ if test "${enable_multilib+set}" = set;
|
|
enableval=$enable_multilib; case "${enableval}" in
|
|
yes) multilib=yes ;;
|
|
no) multilib=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for multilib option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for multilib option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
multilib=yes
|
|
@@ -2738,7 +2747,7 @@ if test "${enable_target_optspace+set}"
|
|
enableval=$enable_target_optspace; case "${enableval}" in
|
|
yes) target_optspace=yes ;;
|
|
no) target_optspace=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for target-optspace option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for target-optspace option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
target_optspace=
|
|
@@ -2749,7 +2758,7 @@ if test "${enable_malloc_debugging+set}"
|
|
enableval=$enable_malloc_debugging; case "${enableval}" in
|
|
yes) malloc_debugging=yes ;;
|
|
no) malloc_debugging=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for malloc-debugging option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for malloc-debugging option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
malloc_debugging=
|
|
@@ -2760,7 +2769,7 @@ if test "${enable_newlib_multithread+set
|
|
enableval=$enable_newlib_multithread; case "${enableval}" in
|
|
yes) newlib_multithread=yes ;;
|
|
no) newlib_multithread=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for newlib-multithread option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for newlib-multithread option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
newlib_multithread=yes
|
|
@@ -2772,7 +2781,7 @@ if test "${enable_newlib_iconv+set}" = s
|
|
case "${enableval}" in
|
|
yes) newlib_iconv=yes ;;
|
|
no) newlib_iconv=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for newlib-iconv option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for newlib-iconv option" "$LINENO" 5 ;;
|
|
esac
|
|
fi
|
|
else
|
|
@@ -2787,7 +2796,7 @@ if test "${enable_newlib_elix_level+set}
|
|
2) newlib_elix_level=2 ;;
|
|
3) newlib_elix_level=3 ;;
|
|
4) newlib_elix_level=4 ;;
|
|
- *) as_fn_error "bad value ${enableval} for newlib-elix-level option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for newlib-elix-level option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
newlib_elix_level=0
|
|
@@ -2798,7 +2807,7 @@ if test "${enable_newlib_io_float+set}"
|
|
enableval=$enable_newlib_io_float; case "${enableval}" in
|
|
yes) newlib_io_float=yes ;;
|
|
no) newlib_io_float=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for newlib-io-float option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for newlib-io-float option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
newlib_io_float=yes
|
|
@@ -2809,7 +2818,7 @@ if test "${enable_newlib_supplied_syscal
|
|
enableval=$enable_newlib_supplied_syscalls; case "${enableval}" in
|
|
yes) newlib_may_supply_syscalls=yes ;;
|
|
no) newlib_may_supply_syscalls=no ;;
|
|
- *) as_fn_error "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;;
|
|
+ *) as_fn_error $? "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;;
|
|
esac
|
|
else
|
|
newlib_may_supply_syscalls=yes
|
|
@@ -2846,7 +2855,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"
|
|
am__isrc=' -I$(srcdir)'
|
|
# test to see if srcdir already configured
|
|
if test -f $srcdir/config.status; then
|
|
- as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
|
|
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
|
|
fi
|
|
fi
|
|
|
|
@@ -3126,7 +3135,7 @@ $as_echo "no" >&6; }
|
|
fi
|
|
|
|
|
|
- test -z "$CC" && as_fn_error "no acceptable cc found in \$PATH" "$LINENO" 5
|
|
+ test -z "$CC" && as_fn_error $? "no acceptable cc found in \$PATH" "$LINENO" 5
|
|
fi
|
|
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using GNU C" >&5
|
|
@@ -3798,7 +3807,7 @@ esac
|
|
done
|
|
IFS=$as_save_IFS
|
|
if test -z "$ac_cv_path_SED"; then
|
|
- as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
|
|
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
|
|
fi
|
|
else
|
|
ac_cv_path_SED=$SED
|
|
@@ -4521,8 +4530,8 @@ fi
|
|
|
|
test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-as_fn_error "no acceptable C compiler found in \$PATH
|
|
-See \`config.log' for more details." "$LINENO" 5; }
|
|
+as_fn_error $? "no acceptable C compiler found in \$PATH
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
|
|
# Provide some information about the compiler.
|
|
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
|
|
@@ -4636,9 +4645,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-{ as_fn_set_status 77
|
|
-as_fn_error "C compiler cannot create executables
|
|
-See \`config.log' for more details." "$LINENO" 5; }; }
|
|
+as_fn_error 77 "C compiler cannot create executables
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
else
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
|
$as_echo "yes" >&6; }
|
|
@@ -4680,8 +4688,8 @@ done
|
|
else
|
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-as_fn_error "cannot compute suffix of executables: cannot compile and link
|
|
-See \`config.log' for more details." "$LINENO" 5; }
|
|
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
fi
|
|
rm -f conftest conftest$ac_cv_exeext
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
|
|
@@ -4738,9 +4746,9 @@ $as_echo "$ac_try_echo"; } >&5
|
|
else
|
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-as_fn_error "cannot run C compiled programs.
|
|
+as_fn_error $? "cannot run C compiled programs.
|
|
If you meant to cross compile, use \`--host'.
|
|
-See \`config.log' for more details." "$LINENO" 5; }
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
fi
|
|
fi
|
|
fi
|
|
@@ -4791,8 +4799,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
|
|
|
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-as_fn_error "cannot compute suffix of object files: cannot compile
|
|
-See \`config.log' for more details." "$LINENO" 5; }
|
|
+as_fn_error $? "cannot compute suffix of object files: cannot compile
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
fi
|
|
rm -f conftest.$ac_cv_objext conftest.$ac_ext
|
|
fi
|
|
@@ -5190,7 +5198,7 @@ esac
|
|
done
|
|
IFS=$as_save_IFS
|
|
if test -z "$ac_cv_path_GREP"; then
|
|
- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
fi
|
|
else
|
|
ac_cv_path_GREP=$GREP
|
|
@@ -5256,7 +5264,7 @@ esac
|
|
done
|
|
IFS=$as_save_IFS
|
|
if test -z "$ac_cv_path_EGREP"; then
|
|
- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
fi
|
|
else
|
|
ac_cv_path_EGREP=$EGREP
|
|
@@ -5323,7 +5331,7 @@ esac
|
|
done
|
|
IFS=$as_save_IFS
|
|
if test -z "$ac_cv_path_FGREP"; then
|
|
- as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
fi
|
|
else
|
|
ac_cv_path_FGREP=$FGREP
|
|
@@ -5439,7 +5447,7 @@ else
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
|
$as_echo "no" >&6; }
|
|
fi
|
|
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
|
|
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
|
|
$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
|
|
if test "${lt_cv_prog_gnu_ld+set}" = set; then :
|
|
@@ -7703,7 +7711,7 @@ else
|
|
# Broken: fails on valid input.
|
|
continue
|
|
fi
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.err conftest.i conftest.$ac_ext
|
|
|
|
# OK, works on sane cases. Now check whether nonexistent headers
|
|
# can be detected and how.
|
|
@@ -7719,11 +7727,11 @@ else
|
|
ac_preproc_ok=:
|
|
break
|
|
fi
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.err conftest.i conftest.$ac_ext
|
|
|
|
done
|
|
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.i conftest.err conftest.$ac_ext
|
|
if $ac_preproc_ok; then :
|
|
break
|
|
fi
|
|
@@ -7762,7 +7770,7 @@ else
|
|
# Broken: fails on valid input.
|
|
continue
|
|
fi
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.err conftest.i conftest.$ac_ext
|
|
|
|
# OK, works on sane cases. Now check whether nonexistent headers
|
|
# can be detected and how.
|
|
@@ -7778,18 +7786,18 @@ else
|
|
ac_preproc_ok=:
|
|
break
|
|
fi
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.err conftest.i conftest.$ac_ext
|
|
|
|
done
|
|
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
|
-rm -f conftest.err conftest.$ac_ext
|
|
+rm -f conftest.i conftest.err conftest.$ac_ext
|
|
if $ac_preproc_ok; then :
|
|
|
|
else
|
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
|
|
-See \`config.log' for more details." "$LINENO" 5; }
|
|
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
|
|
+See \`config.log' for more details" "$LINENO" 5 ; }
|
|
fi
|
|
|
|
ac_ext=c
|
|
@@ -7918,8 +7926,7 @@ do :
|
|
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
|
|
"
|
|
-eval as_val=\$$as_ac_Header
|
|
- if test "x$as_val" = x""yes; then :
|
|
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
|
cat >>confdefs.h <<_ACEOF
|
|
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
_ACEOF
|
|
@@ -11425,7 +11432,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 11428 "configure"
|
|
+#line 11435 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -11531,7 +11538,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<_LT_EOF
|
|
-#line 11534 "configure"
|
|
+#line 11541 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -11820,6 +11827,8 @@ subdirs="$subdirs a29khif"
|
|
;;
|
|
w65) subdirs="$subdirs w65"
|
|
;;
|
|
+ toaru) subdirs="$subdirs toaru"
|
|
+ ;;
|
|
z8ksim) subdirs="$subdirs z8ksim"
|
|
;;
|
|
esac;
|
|
@@ -11961,6 +11970,7 @@ DEFS=`sed -n "$ac_script" confdefs.h`
|
|
|
|
ac_libobjs=
|
|
ac_ltlibobjs=
|
|
+U=
|
|
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
|
|
# 1. Remove the extension, and $U if already installed.
|
|
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
|
|
@@ -11976,7 +11986,7 @@ LTLIBOBJS=$ac_ltlibobjs
|
|
|
|
|
|
if test -z "${MAY_SUPPLY_SYSCALLS_TRUE}" && test -z "${MAY_SUPPLY_SYSCALLS_FALSE}"; then
|
|
- as_fn_error "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined.
|
|
+ as_fn_error $? "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -n "$EXEEXT"; then
|
|
@@ -11988,47 +11998,47 @@ else
|
|
fi
|
|
|
|
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
|
|
- as_fn_error "conditional \"AMDEP\" was never defined.
|
|
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
|
|
- as_fn_error "conditional \"am__fastdepCC\" was never defined.
|
|
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
|
|
- as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
|
|
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${ELIX_LEVEL_0_TRUE}" && test -z "${ELIX_LEVEL_0_FALSE}"; then
|
|
- as_fn_error "conditional \"ELIX_LEVEL_0\" was never defined.
|
|
+ as_fn_error $? "conditional \"ELIX_LEVEL_0\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${ELIX_LEVEL_1_TRUE}" && test -z "${ELIX_LEVEL_1_FALSE}"; then
|
|
- as_fn_error "conditional \"ELIX_LEVEL_1\" was never defined.
|
|
+ as_fn_error $? "conditional \"ELIX_LEVEL_1\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${ELIX_LEVEL_2_TRUE}" && test -z "${ELIX_LEVEL_2_FALSE}"; then
|
|
- as_fn_error "conditional \"ELIX_LEVEL_2\" was never defined.
|
|
+ as_fn_error $? "conditional \"ELIX_LEVEL_2\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${ELIX_LEVEL_3_TRUE}" && test -z "${ELIX_LEVEL_3_FALSE}"; then
|
|
- as_fn_error "conditional \"ELIX_LEVEL_3\" was never defined.
|
|
+ as_fn_error $? "conditional \"ELIX_LEVEL_3\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${ELIX_LEVEL_4_TRUE}" && test -z "${ELIX_LEVEL_4_FALSE}"; then
|
|
- as_fn_error "conditional \"ELIX_LEVEL_4\" was never defined.
|
|
+ as_fn_error $? "conditional \"ELIX_LEVEL_4\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${USE_LIBTOOL_TRUE}" && test -z "${USE_LIBTOOL_FALSE}"; then
|
|
- as_fn_error "conditional \"USE_LIBTOOL\" was never defined.
|
|
+ as_fn_error $? "conditional \"USE_LIBTOOL\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
|
|
- as_fn_error "conditional \"am__fastdepCC\" was never defined.
|
|
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
if test -z "${HAVE_SYS_DIR_TRUE}" && test -z "${HAVE_SYS_DIR_FALSE}"; then
|
|
- as_fn_error "conditional \"HAVE_SYS_DIR\" was never defined.
|
|
+ as_fn_error $? "conditional \"HAVE_SYS_DIR\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
|
|
@@ -12178,19 +12188,19 @@ export LANGUAGE
|
|
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
|
|
|
|
|
-# as_fn_error ERROR [LINENO LOG_FD]
|
|
-# ---------------------------------
|
|
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
|
|
+# ----------------------------------------
|
|
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
|
|
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
|
|
-# script with status $?, using 1 if that was 0.
|
|
+# script with STATUS, using 1 if that was 0.
|
|
as_fn_error ()
|
|
{
|
|
- as_status=$?; test $as_status -eq 0 && as_status=1
|
|
- if test "$3"; then
|
|
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
|
|
+ as_status=$1; test $as_status -eq 0 && as_status=1
|
|
+ if test "$4"; then
|
|
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
|
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
|
|
fi
|
|
- $as_echo "$as_me: error: $1" >&2
|
|
+ $as_echo "$as_me: error: $2" >&2
|
|
as_fn_exit $as_status
|
|
} # as_fn_error
|
|
|
|
@@ -12386,7 +12396,7 @@ $as_echo X"$as_dir" |
|
|
test -d "$as_dir" && break
|
|
done
|
|
test -z "$as_dirs" || eval "mkdir $as_dirs"
|
|
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
|
|
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
|
|
|
|
|
|
} # as_fn_mkdir_p
|
|
@@ -12440,7 +12450,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
|
|
# values after options handling.
|
|
ac_log="
|
|
This file was extended by newlib $as_me 1.19.0, which was
|
|
-generated by GNU Autoconf 2.65. Invocation command line was
|
|
+generated by GNU Autoconf 2.67. Invocation command line was
|
|
|
|
CONFIG_FILES = $CONFIG_FILES
|
|
CONFIG_HEADERS = $CONFIG_HEADERS
|
|
@@ -12497,10 +12507,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
|
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
|
ac_cs_version="\\
|
|
newlib config.status 1.19.0
|
|
-configured by $0, generated by GNU Autoconf 2.65,
|
|
+configured by $0, generated by GNU Autoconf 2.67,
|
|
with options \\"\$ac_cs_config\\"
|
|
|
|
-Copyright (C) 2009 Free Software Foundation, Inc.
|
|
+Copyright (C) 2010 Free Software Foundation, Inc.
|
|
This config.status script is free software; the Free Software Foundation
|
|
gives unlimited permission to copy, distribute and modify it."
|
|
|
|
@@ -12518,11 +12528,16 @@ ac_need_defaults=:
|
|
while test $# != 0
|
|
do
|
|
case $1 in
|
|
- --*=*)
|
|
+ --*=?*)
|
|
ac_option=`expr "X$1" : 'X\([^=]*\)='`
|
|
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
|
|
ac_shift=:
|
|
;;
|
|
+ --*=)
|
|
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
|
|
+ ac_optarg=
|
|
+ ac_shift=:
|
|
+ ;;
|
|
*)
|
|
ac_option=$1
|
|
ac_optarg=$2
|
|
@@ -12544,6 +12559,7 @@ do
|
|
$ac_shift
|
|
case $ac_optarg in
|
|
*\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
|
+ '') as_fn_error $? "missing file argument" ;;
|
|
esac
|
|
as_fn_append CONFIG_FILES " '$ac_optarg'"
|
|
ac_need_defaults=false;;
|
|
@@ -12554,7 +12570,7 @@ do
|
|
ac_cs_silent=: ;;
|
|
|
|
# This is an error.
|
|
- -*) as_fn_error "unrecognized option: \`$1'
|
|
+ -*) as_fn_error $? "unrecognized option: \`$1'
|
|
Try \`$0 --help' for more information." ;;
|
|
|
|
*) as_fn_append ac_config_targets " $1"
|
|
@@ -12876,7 +12892,7 @@ do
|
|
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
|
|
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
|
|
|
- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
|
|
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
|
|
esac
|
|
done
|
|
|
|
@@ -12913,7 +12929,7 @@ $debug ||
|
|
{
|
|
tmp=./conf$$-$RANDOM
|
|
(umask 077 && mkdir "$tmp")
|
|
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
|
|
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
|
|
|
|
# Set up the scripts for CONFIG_FILES section.
|
|
# No need to generate them if there are no CONFIG_FILES.
|
|
@@ -12930,7 +12946,7 @@ if test "x$ac_cr" = x; then
|
|
fi
|
|
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
|
|
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
|
|
- ac_cs_awk_cr='\r'
|
|
+ ac_cs_awk_cr='\\r'
|
|
else
|
|
ac_cs_awk_cr=$ac_cr
|
|
fi
|
|
@@ -12944,18 +12960,18 @@ _ACEOF
|
|
echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
|
|
echo "_ACEOF"
|
|
} >conf$$subs.sh ||
|
|
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
|
|
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
|
|
ac_delim='%!_!# '
|
|
for ac_last_try in false false false false false :; do
|
|
. ./conf$$subs.sh ||
|
|
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
|
|
ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
|
|
if test $ac_delim_n = $ac_delim_num; then
|
|
break
|
|
elif $ac_last_try; then
|
|
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
|
|
else
|
|
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
|
|
fi
|
|
@@ -13044,20 +13060,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/n
|
|
else
|
|
cat
|
|
fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
|
|
- || as_fn_error "could not setup config files machinery" "$LINENO" 5
|
|
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
|
|
_ACEOF
|
|
|
|
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
|
|
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
|
|
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
|
|
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
|
|
# trailing colons and then remove the whole line if VPATH becomes empty
|
|
# (actually we leave an empty line to preserve line numbers).
|
|
if test "x$srcdir" = x.; then
|
|
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
|
|
-s/:*\$(srcdir):*/:/
|
|
-s/:*\${srcdir}:*/:/
|
|
-s/:*@srcdir@:*/:/
|
|
-s/^\([^=]*=[ ]*\):*/\1/
|
|
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
|
|
+h
|
|
+s///
|
|
+s/^/:/
|
|
+s/[ ]*$/:/
|
|
+s/:\$(srcdir):/:/g
|
|
+s/:\${srcdir}:/:/g
|
|
+s/:@srcdir@:/:/g
|
|
+s/^:*//
|
|
s/:*$//
|
|
+x
|
|
+s/\(=[ ]*\).*/\1/
|
|
+G
|
|
+s/\n//
|
|
s/^[^=]*=[ ]*$//
|
|
}'
|
|
fi
|
|
@@ -13075,7 +13099,7 @@ do
|
|
esac
|
|
case $ac_mode$ac_tag in
|
|
:[FHL]*:*);;
|
|
- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
|
|
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
|
|
:[FH]-) ac_tag=-:-;;
|
|
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
|
|
esac
|
|
@@ -13103,7 +13127,7 @@ do
|
|
[\\/$]*) false;;
|
|
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
|
|
esac ||
|
|
- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
|
|
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
|
|
esac
|
|
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
|
|
as_fn_append ac_file_inputs " '$ac_f'"
|
|
@@ -13130,7 +13154,7 @@ $as_echo "$as_me: creating $ac_file" >&6
|
|
|
|
case $ac_tag in
|
|
*:-:* | *:-) cat >"$tmp/stdin" \
|
|
- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
|
|
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
|
|
esac
|
|
;;
|
|
esac
|
|
@@ -13267,22 +13291,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
|
|
$ac_datarootdir_hack
|
|
"
|
|
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
|
|
- || as_fn_error "could not create $ac_file" "$LINENO" 5
|
|
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
|
|
|
|
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
|
|
{ ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
|
|
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
|
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
|
|
-which seems to be undefined. Please make sure it is defined." >&5
|
|
+which seems to be undefined. Please make sure it is defined" >&5
|
|
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
|
|
-which seems to be undefined. Please make sure it is defined." >&2;}
|
|
+which seems to be undefined. Please make sure it is defined" >&2;}
|
|
|
|
rm -f "$tmp/stdin"
|
|
case $ac_file in
|
|
-) cat "$tmp/out" && rm -f "$tmp/out";;
|
|
*) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
|
|
esac \
|
|
- || as_fn_error "could not create $ac_file" "$LINENO" 5
|
|
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
|
|
;;
|
|
|
|
|
|
@@ -14043,7 +14067,7 @@ _ACEOF
|
|
ac_clean_files=$ac_clean_files_save
|
|
|
|
test $ac_write_fail = 0 ||
|
|
- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
|
|
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
|
|
|
|
|
|
# configure is writing to config.log, and then calls config.status.
|
|
@@ -14064,7 +14088,7 @@ if test "$no_create" != yes; then
|
|
exec 5>>config.log
|
|
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
|
|
# would make configure fail if this is the last instruction.
|
|
- $ac_cs_success || as_fn_exit $?
|
|
+ $ac_cs_success || as_fn_exit 1
|
|
fi
|
|
|
|
#
|
|
@@ -14205,7 +14229,7 @@ $as_echo "$as_me: running $SHELL $ac_sub
|
|
# The eval makes quoting arguments work.
|
|
eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
|
|
--cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
|
|
- as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
|
|
+ as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
|
|
fi
|
|
|
|
cd "$ac_popdir"
|
|
diff -rupN _source/newlib-1.19.0/newlib/libc/sys/configure.in newlib-1.19.0/newlib/libc/sys/configure.in
|
|
--- _source/newlib-1.19.0/newlib/libc/sys/configure.in 2010-02-24 14:59:55.000000000 -0600
|
|
+++ newlib-1.19.0/newlib/libc/sys/configure.in 2011-04-24 20:37:33.000000000 -0500
|
|
@@ -45,6 +45,7 @@ if test -n "${sys_dir}"; then
|
|
sysvnecv70) AC_CONFIG_SUBDIRS(sysvnecv70) ;;
|
|
tic80) AC_CONFIG_SUBDIRS(tic80) ;;
|
|
w65) AC_CONFIG_SUBDIRS(w65) ;;
|
|
+ toaru) AC_CONFIG_SUBDIRS(toaru) ;;
|
|
z8ksim) AC_CONFIG_SUBDIRS(z8ksim) ;;
|
|
esac;
|
|
fi
|