Re: gclcvs
Camm Maguire wrote:
> 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.
This would be a bug in gcc then. Please check again and report it,
preferably with a small testcase.
> 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:
This seems to be the only way.
Thiemo
Reply to:
- References:
- gclcvs
- From: Camm Maguire <camm@enhanced.com>