[parisc-linux] Re: call_init in libc6 2.3.6.ds1-11
John David Anglin
dave at hiauly1.hia.nrc.ca
Sat Feb 17 13:32:16 MST 2007
> /* The test for "addr & 2" below is to accomodate old binaries which
> violated the ELF ABI by pointing DT_INIT and DT_FINI at a function
> descriptor. */
> #define DL_DT_INIT_ADDRESS(map, addr) \
> ((Elf32_Addr)(addr) & 2 ? (addr) : DL_AUTO_FUNCTION_ADDRESS (map, addr))
This is the ia64 define:
#define DL_DT_INIT_ADDRESS(map, addr) DL_AUTO_FUNCTION_ADDRESS (map, addr)
Calls to init on ia64 always use a function descriptor.
While it's possible that DT_INIT and DT_FINI shouldn't point at function
descriptors, the above hack can't be right since DL_DT_INIT_ADDRESS is used
for calling init() from dl-init.c:
init_t init = (init_t) DL_DT_INIT_ADDRESS
(l, l->l_addr + l->l_info[DT_INIT]->d_un.d_ptr);
/* Call the function. */
init (argc, argv, env);
Dave
--
J. David Anglin dave.anglin at nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
More information about the parisc-linux
mailing list