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