alastair@reid-consulting-uk.ltd.uk wrote:
I found myself a solaris box and was able to reproduce your bug.
To try to track down what was happening, I modified the code generated by ffihugs and modified your test.c and Test.hs to check that the function 'times' gave the same result. Test.c and Test.hs both saw a return value of -1 (hence the segfault) but the modified version of test.c didn't print anything.
Hypothesis: there is a standard library function on solaris called 'times' which is shadowing your definition of times.
To test this hypothesis, I renamed the C function being called to 'times_adr', recompiled, reloaded and... it worked just fine.
Thank you very much! This is enough for me to continue my learning.
Does anyone know of a flag you can pass to a linker to make it report an error instead of silently doing the wrong thing?
I tried with '--warn-common' but without success. Then I tried to repeat the error with C only: -I compiled a shared lib with gcc -c test.c ld -o libtest.so -shared test.o -then I linked a simple test --------main.c------------- #include "test.h" int main(int argc,char** argv){ printf("%s",times('a',2)); } --------main.c------------- with the command gcc -ltest -L. main.c but the program worked correctly. Maybe the 'times' symbol is defined in some other library that ffihugs uses by default. -- Marco Vezzoli tel. +39 039 603 6852 STMicroelectronics fax. +39 039 603 5055