2 * Architecture specific code used by dl-startup.c
5 /* This code fixes the stack pointer so that the dynamic linker
6 * can find argc, argv and auxvt (Auxillary Vector Table). */
12 " .type _start,@function\n" \
14 " move.d $sp,$r10\n" \
15 " lapc _dl_start,$r9\n" \
21 " .size _start,.-_start\n" \
30 " .type _start,@function\n" \
32 " move.d $sp,$r10\n" \
34 " add.d _dl_start - ., $r9\n" \
39 " .size _start,.-_start\n" \
43 #endif /* __arch_v32 */
45 /* Get a pointer to the argv array. On many platforms this can be just
46 * the address if the first argument, on other platforms we need to
47 * do something a little more subtle here. */
48 #define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long *) ARGS)+1)
51 /* We can't call functions earlier in the dl startup process */
52 #define NO_FUNCS_BEFORE_BOOTSTRAP
55 /* Handle relocation of the symbols in the dynamic loader. */
57 void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
58 unsigned long symbol_addr, unsigned long load_addr, Elf32_Sym *symtab)
60 switch (ELF32_R_TYPE(rpnt->r_info)) {
62 case R_CRIS_JUMP_SLOT:
64 *reloc_addr = symbol_addr;
67 *(short *) *reloc_addr = symbol_addr + rpnt->r_addend - *reloc_addr - 2;
70 *reloc_addr = symbol_addr + rpnt->r_addend - *reloc_addr - 4;
75 *reloc_addr = load_addr + rpnt->r_addend;