Greetings! gcl uses a homemade address lookup table for functions it directly writes into C sources files to be compiled and loaded into the running image. The code looks like this:
typedef struct { const char *n; unsigned long ad; } Plt; #define MY_PLT(a_) {#a_,(unsigned long)(void *)a_} static Plt mplt[]={ /* This is an attempt to at least capture the addresses to which the compiler directly refers in C code. (Some symbols are not explicitly mentioned in the C source but are generated by gcc, usually in a platform specific way). At the time of this writing, these symbols alone are sufficient for compiling maxima,acl2,and axiom on x86. This table is not (currently at least) consulted in actuality -- the mere mention of the symbols here (at present) ensures that the symbols are assigned values by the linker, which are used preferentially to these values in sfasli.c. FIXME -- this should be made synchronous with compiler changes; sort the list automatically. SORT THIS LIST BY HAND FOR THE TIME BEING. */ #ifndef _WIN32 # include "plt.h" #endif }; ============================================================================= plt.h: ============================================================================= MY_PLT(_IO_getc), MY_PLT(_IO_putc), MY_PLT(_mcount), MY_PLT(_setjmp), MY_PLT(acos), MY_PLT(acosh), MY_PLT(asin), MY_PLT(asinh), MY_PLT(atan), MY_PLT(atanh), MY_PLT(bzero), MY_PLT(cos), MY_PLT(cosh), MY_PLT(exp), MY_PLT(fdopen), MY_PLT(feof), MY_PLT(log), MY_PLT(logl), MY_PLT(memset), MY_PLT(read), MY_PLT(sin), MY_PLT(sinh), MY_PLT(sqrt), MY_PLT(tan), MY_PLT(tanh), MY_PLT(write) ============================================================================= This has worked for quite a while, but with the latest gcc (4.1) on mips, I cannot avoid having the address of the gcc builtin picked up here, no matter if I use -fno-builtin or anything else, it seems. And for some other reason, relocating a loaded object address to the address of the builtin function does not return properly -- I'm guessing there are non-standard call sematics here. Any idea of a workaround? That is, short of putting in my own trampolines for each function: static double cos1(double x) { return cos(x); } #undef cos #define cos cos1 static Plt mplt[]={ ... Take care, -- Camm Maguire [EMAIL PROTECTED] ========================================================================== "The earth is but one country, and mankind its citizens." -- Baha'u'llah _______________________________________________ Gcl-devel mailing list Gcl-devel@gnu.org http://lists.gnu.org/mailman/listinfo/gcl-devel