On 7/13/2015 1:06 PM, Sebastian Huber wrote:
Yes, this option sounded like the right way to fix it, but...
https://gcc.gnu.org/ml/gcc-help/2015-03/msg00093.html
https://gcc.gnu.org/ml/gcc-help/2015-03/msg00094.html
Ouch! That is a big red flashing sign which says stay away!
And to Gedare's point of raising this as a PR, it is just
an optimization side-effect more than bug.
I wonder if this could impact any code in newlib? It should
have the same issue with the default calloc(). And maybe
some other routines like the string and mem* ones?
----- Joel Sherrill <joel.sherr...@oarcorp.com> schrieb:
This is possible to do inside the file itself using function
attributes or pragmas. I am not sure which method is best but
wanted to pass along so we could decide as a group.
optimize
The optimize attribute is used to specify that a function is to be compiled
with different optimization options than specified on the command line.
Arguments can either be numbers or strings. Numbers are assumed to be an
optimization level. Strings that begin with O are assumed to be an optimization
option, while other options are assumed to be used with a -f prefix. You can
also use the ‘#pragma GCC optimize’ pragma to set the optimization options that
affect more than one function. See Function Specific Option Pragmas, for
details about the ‘#pragma GCC optimize’ pragma.
This can be used for instance to have frequently-executed functions compiled
with more aggressive optimization options that produce faster and larger code,
while other functions can be compiled with less aggressive options.
--joel
On 7/13/2015 3:20 AM, Sebastian Huber wrote:
Disable an optimization which would lead to a recursive calloc() call in
calloc().
---
cpukit/libcsupport/Makefile.am | 8 ++++++--
cpukit/wrapup/Makefile.am | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index 7474079..a5da5f1 100644
--- a/cpukit/libcsupport/Makefile.am
+++ b/cpukit/libcsupport/Makefile.am
@@ -1,8 +1,9 @@
include $(top_srcdir)/automake/multilib.am
include $(top_srcdir)/automake/compile.am
-noinst_LIBRARIES = libcsupport.a
+noinst_LIBRARIES = libcsupport.a libcalloc.a
libcsupport_a_CPPFLAGS = $(AM_CPPFLAGS)
+libcalloc_a_CPPFLAGS = $(AM_CPPFLAGS)
include_rtemsdir = $(includedir)/rtems
include_rtems_HEADERS = include/console.h
@@ -79,7 +80,7 @@ ID_C_FILES = src/getegid.c src/geteuid.c src/getgid.c
src/getgroups.c \
src/seteuid.c src/setgid.c src/setuid.c src/setegid.c src/setpgid.c \
src/setsid.c
-MALLOC_C_FILES = src/malloc_initialize.c src/calloc.c src/malloc.c \
+MALLOC_C_FILES = src/malloc_initialize.c src/malloc.c \
src/realloc.c src/_calloc_r.c src/_malloc_r.c \
src/free.c src/_free_r.c \
src/_realloc_r.c src/mallocfreespace.c \
@@ -138,6 +139,9 @@ libcsupport_a_SOURCES += $(LIBC_GLUE_C_FILES)
$(PASSWORD_GROUP_C_FILES) \
libcsupport_a_SOURCES += src/flockfile.c src/funlockfile.c src/ftrylockfile.c
+libcalloc_a_SOURCES = src/calloc.c
+libcalloc_a_CFLAGS = -fno-builtin
+
EXTRA_DIST = src/TODO src/CASES src/README
include $(srcdir)/preinstall.am
diff --git a/cpukit/wrapup/Makefile.am b/cpukit/wrapup/Makefile.am
index 53861df..5fd6e33 100644
--- a/cpukit/wrapup/Makefile.am
+++ b/cpukit/wrapup/Makefile.am
@@ -21,6 +21,7 @@ endif
TMP_LIBS += ../libcrypt/libcrypt.a
TMP_LIBS += ../libcsupport/libcsupport.a
+TMP_LIBS += ../libcsupport/libcalloc.a
TMP_LIBS += ../libblock/libblock.a
if LIBDOSFS
TMP_LIBS += ../libfs/libdosfs.a
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherr...@oarcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherr...@oarcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel