Revision b346ff46 linux-user/elfload.c

b/linux-user/elfload.c
38 38
	   A value of 0 tells we have no such handler.  */
39 39
#define ELF_PLAT_INIT(_r)	_r->edx = 0
40 40

  
41
static inline void init_thread(struct target_pt_regs *regs, struct image_info *infop)
42
{
43
    regs->esp = infop->start_stack;
44
    regs->eip = infop->entry;
45
}
46

  
47
#define USE_ELF_CORE_DUMP
48
#define ELF_EXEC_PAGESIZE	4096
49

  
50
#endif
51

  
52
#ifdef TARGET_ARM
53

  
54
#define ELF_START_MMAP 0x80000000
55

  
56
#define elf_check_arch(x) ( (x) == EM_ARM )
57

  
58
#define ELF_CLASS	ELFCLASS32
59
#ifdef TARGET_WORDS_BIGENDIAN
60
#define ELF_DATA	ELFDATA2MSB
61
#else
62
#define ELF_DATA	ELFDATA2LSB
63
#endif
64
#define ELF_ARCH	EM_ARM
65

  
66
#define ELF_PLAT_INIT(_r)	_r->ARM_r0 = 0
67

  
68
static inline void init_thread(struct target_pt_regs *regs, struct image_info *infop)
69
{
70
    target_long *stack = (void *)infop->start_stack;
71
    memset(regs, 0, sizeof(*regs));
72
    regs->ARM_cpsr = 0x10;
73
    regs->ARM_pc = infop->entry;
74
    regs->ARM_sp = infop->start_stack;
75
    regs->ARM_r2 = tswapl(stack[2]); /* envp */
76
    regs->ARM_r1 = tswapl(stack[1]); /* argv */
77
    regs->ARM_r0 = tswapl(stack[0]); /* argc */
78
}
79

  
41 80
#define USE_ELF_CORE_DUMP
42 81
#define ELF_EXEC_PAGESIZE	4096
43 82

  
......
1148 1187
	}
1149 1188
        if(retval>=0) {
1150 1189
	    /* success.  Initialize important registers */
1151
	    regs->esp = infop->start_stack;
1152
	    regs->eip = infop->entry;
1190
            init_thread(regs, infop);
1153 1191
	    return retval;
1154 1192
	}
1155 1193

  

Also available in: Unified diff