Revision 2f619698 linux-user/elfload.c
b/linux-user/elfload.c | ||
---|---|---|
179 | 179 |
regs->ARM_cpsr |= CPSR_T; |
180 | 180 |
regs->ARM_pc = infop->entry & 0xfffffffe; |
181 | 181 |
regs->ARM_sp = infop->start_stack; |
182 |
regs->ARM_r2 = tgetl(stack + 8); /* envp */ |
|
183 |
regs->ARM_r1 = tgetl(stack + 4); /* envp */ |
|
182 |
/* FIXME - what to for failure of get_user()? */ |
|
183 |
get_user_ual(regs->ARM_r2, stack + 8); /* envp */ |
|
184 |
get_user_ual(regs->ARM_r1, stack + 4); /* envp */ |
|
184 | 185 |
/* XXX: it seems that r0 is zeroed after ! */ |
185 | 186 |
regs->ARM_r0 = 0; |
186 | 187 |
/* For uClinux PIC binaries. */ |
... | ... | |
341 | 342 |
* but this is what the ABI wants and is needed to allow |
342 | 343 |
* execution of PPC BSD programs. |
343 | 344 |
*/ |
344 |
_regs->gpr[3] = tgetl(pos); |
|
345 |
/* FIXME - what to for failure of get_user()? */ |
|
346 |
get_user_ual(_regs->gpr[3], pos); |
|
345 | 347 |
pos += sizeof(abi_ulong); |
346 | 348 |
_regs->gpr[4] = pos; |
347 | 349 |
for (tmp = 1; tmp != 0; pos += sizeof(abi_ulong)) |
... | ... | |
733 | 735 |
if (nbyte) { |
734 | 736 |
nbyte = qemu_host_page_size - nbyte; |
735 | 737 |
do { |
736 |
tput8(elf_bss, 0); |
|
738 |
/* FIXME - what to do if put_user() fails? */ |
|
739 |
put_user_u8(0, elf_bss); |
|
737 | 740 |
elf_bss++; |
738 | 741 |
} while (--nbyte); |
739 | 742 |
} |
... | ... | |
782 | 785 |
/* This is correct because Linux defines |
783 | 786 |
* elf_addr_t as Elf32_Off / Elf64_Off |
784 | 787 |
*/ |
785 |
#if ELF_CLASS == ELFCLASS32 |
|
786 |
#define NEW_AUX_ENT(id, val) do { \ |
|
787 |
sp -= n; tput32(sp, val); \ |
|
788 |
sp -= n; tput32(sp, id); \ |
|
788 |
#define NEW_AUX_ENT(id, val) do { \ |
|
789 |
sp -= n; put_user_ual(val, sp); \ |
|
790 |
sp -= n; put_user_ual(id, sp); \ |
|
789 | 791 |
} while(0) |
790 |
#else |
|
791 |
#define NEW_AUX_ENT(id, val) do { \ |
|
792 |
sp -= n; tput64(sp, val); \ |
|
793 |
sp -= n; tput64(sp, id); \ |
|
794 |
} while(0) |
|
795 |
#endif |
|
792 |
|
|
796 | 793 |
NEW_AUX_ENT (AT_NULL, 0); |
797 | 794 |
|
798 | 795 |
/* There must be exactly DLINFO_ITEMS entries here. */ |
Also available in: Unified diff