initializing wider-than-pointers
James E Wilson
wilson@specifixinc.com
Sat Jul 2 01:19:00 GMT 2005
DJ Delorie wrote:
> For some chips, like xstormy16 and m16c, function pointers are wider
> than other pointers.
Trying to fake two kinds of pointers when we only have one doesn't seem
wise to me.
A possible solution is to use function descriptors. See FDESC_EXPR and
ASM_OUTPUT_FDESC. So now when you take the address of a function, you
get a normal size pointer to a function descriptor. The contents of a
function descriptor are machine dependent, as determined by
ASM_OUTPUT_FDESC, so you can easily put the entire address in there.
This has some advantages. You don't need any machine independent gcc
changes to make it work, and you don't need any (well, fewer)
questionable C casts to get the full function address.
This also has disadvantages. This is an ABI change. You will need
different code for calling through function pointers, though this may
simplify or eliminate your thunks. End users will have to know that
function addresses are actually function descriptor addresses, and write
and appropriate code. If you want function comparisons to still work,
you may need new relocs and linker support to handle function
descriptors, to ensure that there is only one per function.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com
More information about the Gcc
mailing list