Wed, 25 Apr 2001 16:03:17 +0200
I have just tried to implement plan C from Storage.h:
> Hence, Plan C: (unregisterised, compile-through-vanilla-C route only)
> If we didn't manage to get info tables into the text section, then
> we can distinguish between a static closure pointer and an info
> pointer as follows: the first word of an info table is a code
> and therefore in text space, whereas the first word of a closure
> is an info pointer, and therefore not. Shazam!
My current problem is that the first word of an info table is not a
code pointer, it is the SRT table (a pointer to an array of closures).
For my build configuration, the entry pointer is actually the 4th word in
the info table - but that varies, if profiling is enabled for example.
The following will not work:
#define LOOKS_LIKE_GHC_INFO(p) \
If p is a closure, nothing guarantees that the accessed word exists,
or it may be an arbitrary integer which looks like a code pointer.
So, when going unregisterised, could the entry code pointer please
be moved to the start of info tables ? Or is there a smarter solution ?