chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] csc and -O3 vs. -O2


From: felix
Subject: Re: [Chicken-users] csc and -O3 vs. -O2
Date: Fri, 28 May 2004 00:23:22 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113

Peter BARABAS wrote:
Good day,


ix:~/devel/Scheme/CHICKEN$ cat bug.scm (define foo 1)

ix:~/devel/Scheme/CHICKEN$ csc -v -s -O3 bug.scm /usr/local/bin/chicken bug.scm -output-file bug.c -dynamic -feature
chicken-compile-shared -quiet -optimize-level 3
gcc bug.c -o bug.o -O3 -fomit-frame-pointer -fno-strict-aliasing -Wall
-Wno-unused -Wno-uninitialized -DHAVE_ALLOCA_H
-DC_STACK_GROWS_DOWNWARD=1
"-DC_INSTALL_LIB_HOME=\"/usr/local/lib/chicken\"" -DC_USE_C_DEFAULTS
-fPIC -DPIC -DC_SHARED -c -DC_NO_PIC_NO_DLL
rm bug.c
gcc -o bug.so bug.o -lchicken -lsrfi-chicken -lstuffed-chicken -fPIC
-shared -L/usr/local/lib -Wl,-R/usr/local/lib -ldl -lm  -ldl
rm bug.o

ix:~/devel/Scheme/CHICKEN$ csi -batch -quiet -eval '(load "bug.so")'
Error: code to load dynamically was linked with safe runtime libraries,
but executing runtime was not

After some debugging, it turned out that .so loading works fine if I
compile with -O2:

ix:~/devel/Scheme/CHICKEN$ csc -v -s -O2 bug.scm /usr/local/bin/chicken bug.scm -output-file bug.c -dynamic -feature
chicken-compile-shared -quiet -optimize-level 2
gcc bug.c -o bug.o -O3 -fomit-frame-pointer -fno-strict-aliasing -Wall
-Wno-unused -Wno-uninitialized -DHAVE_ALLOCA_H
-DC_STACK_GROWS_DOWNWARD=1
"-DC_INSTALL_LIB_HOME=\"/usr/local/lib/chicken\"" -DC_USE_C_DEFAULTS
-fPIC -DPIC -DC_SHARED -c -DC_NO_PIC_NO_DLL
rm bug.c
gcc -o bug.so bug.o -lchicken -lsrfi-chicken -lstuffed-chicken -fPIC
-shared -L/usr/local/lib -Wl,-R/usr/local/lib -ldl -lm  -ldl
rm bug.o

ix:~/devel/Scheme/CHICKEN$ csi -batch -quiet -eval '(load "bug.so")'
ix:~/devel/Scheme/CHICKEN$

I'm using CHICKEN 1.51 linux-unix-gnu-x86 and gcc 3.3.3 ( though I don't
think it matters ).

Yes, that's a bug. The intention was to catch loading a .so dynamically
that has been linked to the unsafe versions of the runtime-library.
But csc will link files compiled with -s automatically with the safe
libs anyway (unless -unsafe-libraries) is given.

Here is a patch that disables the generation of the "marker"
symbol:

*** 506,512 ****
                  (when customizable (gen "C_fcall "))
                  (gen id) ]
                 [else
!                 (when (and dynamic unsafe (not unit-name))
                    (gen "C_externexport void C_dynamic_and_unsafe(void) {}" 
#t) )
                  (gen "C_externexport void ")
                  (gen "C_" (if unit-name (string-append unit-name "_toplevel") 
"toplevel")) ] )
--- 506,512 ----
                  (when customizable (gen "C_fcall "))
                  (gen id) ]
                 [else
!                 #;(when (and dynamic unsafe (not unit-name))
                    (gen "C_externexport void C_dynamic_and_unsafe(void) {}" 
#t) )
                  (gen "C_externexport void ")
                  (gen "C_" (if unit-name (string-append unit-name "_toplevel") 
"toplevel")) ] )


Thanks.


cheers,
felix




reply via email to

[Prev in Thread] Current Thread [Next in Thread]