12345678910111213141516171819202122232425262728293031323334 |
- __asm__ ("\
- .text\n\
- .globl _start\n\
- .type _start, %function\n\
- _start:\n\
- mov r4, sp\n\
- br _dl_start\n\
- mov r16, r4\n\
- jmp r16\n\
- ");
- /*
- * Get a pointer to the argv array. On many platforms this can be just
- * the address of the first argument, on other platforms we need to
- * do something a little more subtle here.
- */
- #define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long*) ARGS)+1)
- /* The ld.so library requires relocations */
- #define ARCH_NEEDS_BOOTSTRAP_RELOCS
- static __always_inline
- void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
- unsigned long symbol_addr, unsigned long load_addr, attribute_unused Elf32_Sym *symtab)
- {
- switch (ELF_R_TYPE(rpnt->r_info)) {
- case R_NIOS2_RELATIVE:
- *reloc_addr = load_addr + rpnt->r_addend;
- break;
- default:
- _dl_exit(1);
- break;
- }
- }
|