Revision 9edc5d79

b/linux-user/elfload.c
134 134
    regs->rip = infop->entry;
135 135
}
136 136

  
137
typedef target_ulong    elf_greg_t;
138
typedef uint32_t        target_uid_t;
139
typedef uint32_t        target_gid_t;
140
typedef int32_t         target_pid_t;
141

  
142
#define ELF_NREG    27
143
typedef elf_greg_t  elf_gregset_t[ELF_NREG];
144

  
145
/*
146
 * Note that ELF_NREG should be 29 as there should be place for
147
 * TRAPNO and ERR "registers" as well but linux doesn't dump
148
 * those.
149
 *
150
 * See linux kernel: arch/x86/include/asm/elf.h
151
 */
152
static void elf_core_copy_regs(elf_gregset_t *regs, const CPUState *env)
153
{
154
    (*regs)[0] = env->regs[15];
155
    (*regs)[1] = env->regs[14];
156
    (*regs)[2] = env->regs[13];
157
    (*regs)[3] = env->regs[12];
158
    (*regs)[4] = env->regs[R_EBP];
159
    (*regs)[5] = env->regs[R_EBX];
160
    (*regs)[6] = env->regs[11];
161
    (*regs)[7] = env->regs[10];
162
    (*regs)[8] = env->regs[9];
163
    (*regs)[9] = env->regs[8];
164
    (*regs)[10] = env->regs[R_EAX];
165
    (*regs)[11] = env->regs[R_ECX];
166
    (*regs)[12] = env->regs[R_EDX];
167
    (*regs)[13] = env->regs[R_ESI];
168
    (*regs)[14] = env->regs[R_EDI];
169
    (*regs)[15] = env->regs[R_EAX]; /* XXX */
170
    (*regs)[16] = env->eip;
171
    (*regs)[17] = env->segs[R_CS].selector & 0xffff;
172
    (*regs)[18] = env->eflags;
173
    (*regs)[19] = env->regs[R_ESP];
174
    (*regs)[20] = env->segs[R_SS].selector & 0xffff;
175
    (*regs)[21] = env->segs[R_FS].selector & 0xffff;
176
    (*regs)[22] = env->segs[R_GS].selector & 0xffff;
177
    (*regs)[23] = env->segs[R_DS].selector & 0xffff;
178
    (*regs)[24] = env->segs[R_ES].selector & 0xffff;
179
    (*regs)[25] = env->segs[R_FS].selector & 0xffff;
180
    (*regs)[26] = env->segs[R_GS].selector & 0xffff;
181
}
182

  
137 183
#else
138 184

  
139 185
#define ELF_START_MMAP 0x80000000
......
164 210
       A value of 0 tells we have no such handler.  */
165 211
    regs->edx = 0;
166 212
}
213

  
214
typedef target_ulong    elf_greg_t;
215
typedef uint16_t        target_uid_t;
216
typedef uint16_t        target_gid_t;
217
typedef int32_t         target_pid_t;
218

  
219
#define ELF_NREG    17
220
typedef elf_greg_t  elf_gregset_t[ELF_NREG];
221

  
222
/*
223
 * Note that ELF_NREG should be 19 as there should be place for
224
 * TRAPNO and ERR "registers" as well but linux doesn't dump
225
 * those.
226
 *
227
 * See linux kernel: arch/x86/include/asm/elf.h
228
 */
229
static void elf_core_copy_regs(elf_gregset_t *regs, const CPUState *env)
230
{
231
    (*regs)[0] = env->regs[R_EBX];
232
    (*regs)[1] = env->regs[R_ECX];
233
    (*regs)[2] = env->regs[R_EDX];
234
    (*regs)[3] = env->regs[R_ESI];
235
    (*regs)[4] = env->regs[R_EDI];
236
    (*regs)[5] = env->regs[R_EBP];
237
    (*regs)[6] = env->regs[R_EAX];
238
    (*regs)[7] = env->segs[R_DS].selector & 0xffff;
239
    (*regs)[8] = env->segs[R_ES].selector & 0xffff;
240
    (*regs)[9] = env->segs[R_FS].selector & 0xffff;
241
    (*regs)[10] = env->segs[R_GS].selector & 0xffff;
242
    (*regs)[11] = env->regs[R_EAX]; /* XXX */
243
    (*regs)[12] = env->eip;
244
    (*regs)[13] = env->segs[R_CS].selector & 0xffff;
245
    (*regs)[14] = env->eflags;
246
    (*regs)[15] = env->regs[R_ESP];
247
    (*regs)[16] = env->segs[R_SS].selector & 0xffff;
248
}
167 249
#endif
168 250

  
251
#define USE_ELF_CORE_DUMP
169 252
#define ELF_EXEC_PAGESIZE	4096
170 253

  
171 254
#endif

Also available in: Unified diff