[PATCH] Implemented sysconf for Arm
Torbjorn SVENSSON
torbjorn.svensson@st.com
Mon Apr 27 15:30:43 GMT 2020
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 <torbjorn.svensson@st.com>
Signed-off-by: Niklas DAHLQUIST <niklas.dahlquist@st.com>
---
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
More information about the Newlib
mailing list