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

Reply via email to