Commit Graph

25 Commits

Author SHA1 Message Date
Mike Frysinger 4ad6b4d4df newlib: libc: move stdlib multiplex logic from build to source files
Rather than define per-object rules in the Makefile, have small files
that define & include the right content.  This simplifies the build
rules, and makes understanding the source a little easier (imo) as it
makes all the subdirs behave the same: you have 1 source file and it
produces 1 object.  It's also about the same amount of boiler plate,
without having to define custom build rules that can fall out of sync.

This will also be important as we merge the libc.a build into the top
dir since it relies on a single flat list of objects for overrides.

Also take the opportunity to clean up the unnecessary header deps in
here.  Automake provides dependency generation for free now.
2022-03-09 16:58:46 -05:00
Mike Frysinger b1b44f777c newlib: rename mallocr.c to _mallocr.c
This file is a little confusing: it provides all of the mallocr logic,
but is compiled multiple times to produce a unique symbol each time.
For example, building mallocr.c with -DDEFINE_FREER produces freer.o
that only defines _free_r().  This is fine for most symbols, but it's
a little confusing when defining mallocr itself -- we produce a file
with the same symbol name, but we still need -DDEFINE_MALLOCR.  In
order to move the logic from the build rules to source files, using
mallocr.c both as a multiplexer and for defining a single symbol is a
bit tricky.  It's possible (if we add a lot of redundant preprocessor
checks to mallocr.c, or we add complicated build flags just for this
one files), but it's easier if we simply rename this to a dedicated
file.  So let's do that.

We do this as a dedicated commit because the next one will create a
new mallocr.c file and git's automatic diff algorithms can handle
trivial renames, but it can't handle renames+creates in the same
commit.
2022-03-09 04:12:46 -05:00
Mike Frysinger d7b16b0576 newlib: move nano-malloc logic from build to source files
Simplify the build system logic a bit by moving the mallocr.c ->
nano-mallocr.c redirection from the Makefile to the source files.
This allows for consistent object name usage regardless of the
configuration options used in case a machine dir wants to define
its own override.
2022-03-09 04:12:45 -05:00
Mike Frysinger dea52d5c1e newlib: convert INTERNAL_NEWLIB to _LIBC
Since we already set up _LIBC to indicate source files are building
for newlib, we don't need this malloc-specific symbol.  Convert it
over to simplify the build a bit.
2022-03-01 20:30:32 -05:00
Corinna Vinschen aa106b29a6 malloc/nano-malloc: correctly check for out-of-bounds allocation reqs
The overflow check in mEMALIGn erroneously checks for INT_MAX,
albeit the input parameter is size_t.  Fix this to check for
__SIZE_MAX__ instead.  Also, it misses to check the req against
adding the alignment before calling mALLOc.

While at it, add out-of-bounds checks to pvALLOc, nano_memalign,
nano_valloc, and Cygwin's (unused) dlpvalloc.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-11-17 10:52:34 +01:00
Keith Packard via Newlib 588a5e1dde libc/stdlib: Use __builtin_mul_overflow for reallocarray and calloc
This built-in function (available in both gcc and clang) is more
efficient and generates shorter code than open-coding the test.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-08-12 10:09:56 +02:00
Jeff Johnston 4a3d0a5a5d Fix issue with malloc_extend_top
- when calculating a correction to align next brk to page boundary,
  ensure that the correction is less than a page size
- if allocating the correction fails, ensure that the top size is
  set to brk + sbrk_size (minus any front alignment made)

Signed-off-by: Jeff Johnston <jjohnstn@redhat.com>
2018-05-29 10:16:48 -04:00
Jeff Johnston 4f5feab5ea 2010-05-31 Kazu Hirata <kazu@codesourcery.com>
* libc/stdlib/mallocr.c (malloc_extend_top): Backport the
        difference between versions 2.6.4 and 2.6.5.
2010-05-31 19:15:41 +00:00
Jeff Johnston 6c249577fb 2009-09-28 Michael Eager <eager@eagercon.com>
* configure.host: Add microblaze.
        * libc/include/machine/ieeefp.h [MICROBLAZE]: Define __IEEE_BIG_ENDIAN.
        * libc/include/machine/setjmp.h [MICROBLAZE]: Define _JBLEN, _JBTYPE.
        * libc/include/sys/config.h [MICROBLAZE]: Define _REENT_SMALL,
        _UNIX98_THREAD_MUTEX_ATTRIBUTES.
        * libc/include/sys/types.h: Treat XMK like rtems, define
        PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE,
        PTHREAD_MUTEX_DEFAULT, PTHREAD_STACK_MIN, define stuct pthread_attr_s.
        * libc/machine/configure.in: Add microblaze.
        * libc/machine/configure: Add microblaze (not regenerated).
        * libc/machine/microblaze/configure.in: NEW.
        * libc/machine/microblaze/configure: Generate.
        * libc/machine/microblaze/Makefile.am: NEW.
        * libc/machine/microblaze/Makefile.in: Generate.
        * libc/machine/microblaze/{abort.c, strcmp.c, strcpy.c, strlen.c,
        mallocr.c, longjmp.S, setjmp.S}: NEW.
        * libc/stdlib/mallocr.c [MICROBLAZE]: Don't declare sbrk prototype,
        mALLOc(): return malloc value.
2009-09-28 16:42:21 +00:00
Jeff Johnston f522256075 2006-12-18 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/mallocr.c (malloc_extend_top): Add patch from
        2.6.5 version of Doug Lea's malloc which is the basis of
        this code.
2006-12-18 20:21:48 +00:00
Jeff Johnston f011605a90 2005-10-07 Bob Wilson <bob.wilson@acm.org>
* libc/stdlib/mallocr.c (mALLOc, rEALLOCc, mEMALIGn): Set errno
        to ENOMEM on failure.
2005-10-07 18:07:26 +00:00
Jeff Johnston 15c04fd16e 2005-06-03 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/mallocr.c (MALLOC_COPY): Switch to use memmove
        instead of memcpy.
2005-06-03 18:57:30 +00:00
Jeff Johnston 1159e0fd94 2005-02-07 Antony King <antony.king@st.com>
* libc/stdio/clearerr.c (clearerr): Ensure CHECK_INIT() is
        called before _flockfile to prevent lock object use before
        initialisation. _REENT_SMALL_CHECK_INIT() and CHECK_INIT()
        take a struct _reent * instead of a FILE *.
        * libc/stdio/fclose.c (_fclose_r): Ditto.
        * libc/stdio/feof.c (feof): Ditto.
        * libc/stdio/ferror.c (ferror): Ditto.
        * libc/stdio/fflush.c (fflush): Ditto.
        * libc/stdio/fgetc.c (fgetc): Ditto.
        * libc/stdio/fgets.c (fgets): Ditto.
        * libc/stdio/fileno.c (fileno): Ditto.
        * libc/stdio/fputc.c (fputc): Ditto.
        * libc/stdio/fputs.c (fputs): Ditto.
        * libc/stdio/fread.c (fread): Ditto.
        * libc/stdio/freopen.c (_freopen_r): Ditto.
        * libc/stdio/fseek.c (_fseek_r): Ditto.
        * libc/stdio/ftell.c (_ftell_r): Ditto.
        * libc/stdio/fwrite.c (fwrite): Ditto.
        * libc/stdio/getc.c (getc): Ditto.
        * libc/stdio/getdelim.c (__getdelim): Ditto.
        * libc/stdio/putc.c (putc): Ditto.
        * libc/stdio/setvbuf.c (setvbuf): Ditto.
        * libc/stdio/ungetc.c (_ungetc_r): Ditto.
        * libc/stdio/vfprintf.c (_VFPRINTF_R): Ditto.
        * libc/stdio64/freopen64.c (_freopen64_r): Ditto.
        * libc/stdio64/fseeko64.c (_fseeko64_r): Ditto.
        * libc/stdio64/ftello64.c (_ftello64_r): Ditto.
        * libc/stdio/local.h (CHECK_INIT): Argument is now a struct
        _reent * instead of a FILE * and so replace incorrect use of
        _REENT with argument.
        * libc/sys/arm/syscalls.c (CHECK_INIT): Ditto.
        * libc/stdio/getchar.c (getchar): _REENT_SMALL_CHECK_INIT() and
        CHECK_INIT() take a struct _reent * instead of a FILE *.
        * libc/stdio/iprintf.c (iprintf, _iprintf_r): Ditto.
        * libc/stdio/iscanf.c (iscanf, _iscanf_r): Ditto.
        * libc/stdio/perror.c (perror): Ditto.
        * libc/stdio/printf.c (printf, _printf_r): Ditto.
        * libc/stdio/putchar.c (putchar): Ditto.
        * libc/stdio/puts.c (puts): Ditto.
        * libc/stdio/refill.c (__srefill): Ditto.
        * libc/stdio/scanf.c (scanf, _scanf_r): Ditto.
        * libc/stdio/vfscanf.c (VFSCANF, _VFSCANF_R): Ditto.
        * libc/stdio/viprintf.c (viprintf, _viprintf_r): Ditto.
        * libc/stdio/viscanf.c (viscanf, _viscanf_r): Ditto.
        * libc/stdio/vprintf.c (vprintf, _vprintf_r): Ditto.
        * libc/stdio/vscanf.c (vscanf, _vscanf_r): Ditto.
        * libc/stdio/wbuf.c (__swbuf): Ditto.
        * libc/stdio/wsetup.c (__swsetup): Ditto.
        * libc/stdlib/mallocr.c (malloc_stats): Ditto.
        * libc/stdlib/mstats.c (_mstats_r): Ditto.
        * libc/include/sys/reent.h (_REENT_SMALL_CHECK_INIT): Ditto.
        * libc/machine/powerpc/vfscanf.c (vfscanf): Ditto.
        * libc/stdio/fgetpos.c (_fgetpos_r): Removed unnecessary calls
        to _flockfile and _funlockfile; rely on locking in _ftell_r.
        * libc/stdio64/fgetpos64.c (_fgetpos64_r): Ditto (_ftello64_r).
        * libc/machine/powerpc/vfprintf.c (__sbprintf): Removed unnecessary
        initialision of _data field in FILE structure.
        * libc/machine/powerpc/vfprintf.c (VFPRINTF): Added CHECK_INIT() call.
2005-02-08 01:33:19 +00:00
Jeff Johnston 8f0211142c 2003-08-19 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/mallocr.c (mALLOc, rEALLOc, mEMEALIGn): Enhance
        overflow detection.
2003-08-19 18:09:54 +00:00
Jeff Johnston 12ee7037a3 2003-02-19 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/mallocr.c (unlink): Revert 02/18 fix.
2003-02-19 19:00:11 +00:00
Jeff Johnston b1ca765e84 2003-02-18 Earnie Boyd <earnie@users.sf.net>
* libc/stdlib/mallocr.c (unlink): Don't assign a value to a pointer
        with a NULL value.
2003-02-18 22:34:02 +00:00
Richard Sandiford f770cf44c3 * libc/include/sys/config.h (SIZE_T_SMALLER_THAN_LONG): Undefine.
* libc/stdlib/mallocr.c (long_sub_size_t): Define in a way that
	doesn't require the SIZE_T_SMALLER_THAN_LONG macro.
2002-10-11 10:28:30 +00:00
Jeff Johnston fe47ea33a9 2002-08-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
* libc/stdlib/mallocr.c: #include windows.h on Win32.
          (AlignPage): Continue macro on next line.
2002-08-20 15:29:30 +00:00
Jeff Johnston 659e70628e 2002-08-09 Jason Tishler <jason@tishler.net>
* libc/stdlib/mallocr.c: Include <limits.h>.
        (request2size): Change macro to do
        unsigned long comparisons and avoid signed overflow.
        (mALLOc): Add overflow check for the number of bytes to allocate.
        (rEALLOc): Ditto.
2002-08-09 21:33:29 +00:00
Alexandre Oliva 2f3009bd13 * libc/stdlib/mallocr.c (malloc_extend_top): If correction sbrk
fails, don't bail out, and try to correct next time.
2002-04-13 10:27:02 +00:00
Matthew Green 8195aff714 * implement a new `struct _reent' that is significantly smaller. use this
if _REENT_SMALL is defined in config.h.  define this for xstormy16.
2002-02-03 09:24:18 +00:00
Jeff Johnston e826766445 2001-08-21 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/mallocr.c [!defined(MALLOC_ALIGNMENT)]: Add conditional
        for SIZE_SZ so that alignment ends up a minimum of 8.
2001-08-21 20:23:16 +00:00
Christopher Faylor 82ea92f3ea * libc/stdlib/mallocr.c: Undefine windows preprocessor variables when compiling
under Cygwin.
2001-01-30 04:04:59 +00:00
Christopher Faylor a385ae7508 * Makefile.am: Fix space vs. tab problem in install-data-local.
* Makefile.in: Regenerate.
* libc/include/_ansi.h (_EXFUN): Define specially for __CYGWIN__.
(_EXPARM): New macro for defining a function parameter.
* libc/include/stdlib.h: Use _EXPARM.
* libc/stdlib/mallocr.c: Don't build cfree for Cygwin.
2000-09-06 20:46:27 +00:00
Christopher Faylor 8a0efa53e4 import newlib-2000-02-17 snapshot 2000-02-17 19:39:52 +00:00