2 * Architecture specific code used by dl-startup.c
5 /* For m68k we do not need any special setup so go right to _dl_boot() */
6 #define DL_BOOT(X) __attribute__ ((unused)) void _dl_boot (X)
8 /* Get a pointer to the argv array. On many platforms this can be just
9 * the address if the first argument, on other platforms we need to
10 * do something a little more subtle here. */
11 #define GET_ARGV(ARGVP, ARGS) ((ARGVP) = ((unsigned int *) &(ARGS)))
14 /* Handle relocation of the symbols in the dynamic loader. */
16 void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
17 unsigned long symbol_addr, unsigned long load_addr, Elf32_Sym *symtab)
19 switch (ELF32_R_TYPE(rpnt->r_info))
22 *(char *) reloc_addr = symbol_addr + rpnt->r_addend;
25 *(short *) reloc_addr = symbol_addr + rpnt->r_addend;
28 *reloc_addr = symbol_addr + rpnt->r_addend;
31 *(char *) reloc_addr = (symbol_addr + rpnt->r_addend
32 - (unsigned int) reloc_addr);
35 *(short *) reloc_addr = (symbol_addr + rpnt->r_addend
36 - (unsigned int) reloc_addr);
39 *reloc_addr = (symbol_addr + rpnt->r_addend
40 - (unsigned int) reloc_addr);
44 *reloc_addr = symbol_addr;
47 *reloc_addr = ((unsigned int) load_addr +
48 (rpnt->r_addend ? : : *reloc_addr));
56 /* Transfer control to the user's application, once the dynamic loader is
57 * done. This routine has to exit the current function, then call the
58 * _dl_elf_main function. */
60 __asm__ volatile ("unlk %%a6\n\t" \
62 : : "a" (_dl_elf_main));