[PATCH] Implemented sysconf for Arm
Torbjorn SVENSSON via Newlib <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <DB8PR10MB3467FE243FBFB4B920CE0E5681AF0@DB8PR10MB3467.EURPRD10.PROD.OUTLOOK.COM> |
The default implementation can be overridden outside newlib to allow a different page size to improve malloc on devices with a small footprint without needing to rebuild newlib. Signed-off-by: Torbjörn SVENSSON <[email protected]> Signed-off-by: Niklas DAHLQUIST <[email protected]> --- newlib/libc/stdlib/mallocr.c | 2 +- newlib/libc/sys/arm/Makefile.am | 2 +- newlib/libc/sys/arm/Makefile.in | 12 ++++++++++-- newlib/libc/sys/arm/sysconf.c | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 newlib/libc/sys/arm/sysconf.c diff --git a/newlib/libc/stdlib/mallocr.c b/newlib/libc/stdlib/mallocr.c index 26d1c89cc..28d278f51 100644 --- a/newlib/libc/stdlib/mallocr.c +++ b/newlib/libc/stdlib/mallocr.c @@ -316,7 +316,7 @@ extern "C" { # undef WIN32 #endif -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__ARM_EABI__) #ifdef SMALL_MEMORY #define malloc_getpagesize (128) #else diff --git a/newlib/libc/sys/arm/Makefile.am b/newlib/libc/sys/arm/Makefile.am index 711872de3..9111f3647 100644 --- a/newlib/libc/sys/arm/Makefile.am +++ b/newlib/libc/sys/arm/Makefile.am @@ -14,7 +14,7 @@ else extra_objs = endif -lib_a_SOURCES = access.c aeabi_atexit.c +lib_a_SOURCES = access.c aeabi_atexit.c sysconf.c lib_a_LIBADD = $(extra_objs) EXTRA_lib_a_SOURCES = trap.S syscalls.c libcfunc.c lib_a_DEPENDENCIES = $(extra_objs) diff --git a/newlib/libc/sys/arm/Makefile.in b/newlib/libc/sys/arm/Makefile.in index c01e4e2ed..67fb695f5 100644 --- a/newlib/libc/sys/arm/Makefile.in +++ b/newlib/libc/sys/arm/Makefile.in @@ -70,7 +70,8 @@ ARFLAGS = cru lib_a_AR = $(AR) $(ARFLAGS) @MAY_SUPPLY_SYSCALLS_TRUE@am__DEPENDENCIES_1 = $(lpfx)libcfunc.o \ @MAY_SUPPLY_SYSCALLS_TRUE@ $(lpfx)trap.o $(lpfx)syscalls.o -am_lib_a_OBJECTS = lib_a-access.$(OBJEXT) lib_a-aeabi_atexit.$(OBJEXT) +am_lib_a_OBJECTS = lib_a-access.$(OBJEXT) lib_a-aeabi_atexit.$(OBJEXT) \ + lib_a-sysconf.$(OBJEXT) lib_a_OBJECTS = $(am_lib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = @@ -183,6 +184,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -198,7 +200,7 @@ AM_CCASFLAGS = $(INCLUDES) noinst_LIBRARIES = lib.a @MAY_SUPPLY_SYSCALLS_FALSE@extra_objs = @MAY_SUPPLY_SYSCALLS_TRUE@extra_objs = $(lpfx)libcfunc.o $(lpfx)trap.o $(lpfx)syscalls.o -lib_a_SOURCES = access.c aeabi_atexit.c +lib_a_SOURCES = access.c aeabi_atexit.c sysconf.c lib_a_LIBADD = $(extra_objs) EXTRA_lib_a_SOURCES = trap.S syscalls.c libcfunc.c lib_a_DEPENDENCIES = $(extra_objs) @@ -288,6 +290,12 @@ lib_a-aeabi_atexit.o: aeabi_atexit.c lib_a-aeabi_atexit.obj: aeabi_atexit.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-aeabi_atexit.obj `if test -f 'aeabi_atexit.c'; then $(CYGPATH_W) 'aeabi_atexit.c'; else $(CYGPATH_W) '$(srcdir)/aeabi_atexit.c'; fi` +lib_a-sysconf.o: sysconf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysconf.o `test -f 'sysconf.c' || echo '$(srcdir)/'`sysconf.c + +lib_a-sysconf.obj: sysconf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sysconf.obj `if test -f 'sysconf.c'; then $(CYGPATH_W) 'sysconf.c'; else $(CYGPATH_W) '$(srcdir)/sysconf.c'; fi` + lib_a-syscalls.o: syscalls.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-syscalls.o `test -f 'syscalls.c' || echo '$(srcdir)/'`syscalls.c diff --git a/newlib/libc/sys/arm/sysconf.c b/newlib/libc/sys/arm/sysconf.c new file mode 100644 index 000000000..86a324fa4 --- /dev/null +++ b/newlib/libc/sys/arm/sysconf.c @@ -0,0 +1,20 @@ +/* libc/sys/arm/sysconf.c - The sysconf function */ + +/* Copyright 2020, STMicroelectronics */ + +#include <unistd.h> +#include <errno.h> + +long sysconf(int name) +{ + switch (name) + { + case _SC_PAGESIZE: + return 4096; + + default: + errno = EINVAL; + return -1; + } + return -1; /* Can't get here */ +} -- 2.18.0