Revision 3b46e624 linux-user/elfload.c
b/linux-user/elfload.c | ||
---|---|---|
695 | 695 |
size *= n; |
696 | 696 |
if (size & 15) |
697 | 697 |
sp -= 16 - (size & 15); |
698 |
|
|
698 |
|
|
699 | 699 |
#define NEW_AUX_ENT(id, val) do { \ |
700 | 700 |
sp -= n; tputl(sp, val); \ |
701 | 701 |
sp -= n; tputl(sp, id); \ |
... | ... | |
833 | 833 |
elf_type, |
834 | 834 |
interpreter_fd, |
835 | 835 |
eppnt->p_offset - TARGET_ELF_PAGEOFFSET(eppnt->p_vaddr)); |
836 |
|
|
836 |
|
|
837 | 837 |
if (error == -1) { |
838 | 838 |
/* Real error */ |
839 | 839 |
close(interpreter_fd); |
... | ... | |
1199 | 1199 |
int elf_prot = 0; |
1200 | 1200 |
int elf_flags = 0; |
1201 | 1201 |
unsigned long error; |
1202 |
|
|
1202 |
|
|
1203 | 1203 |
if (elf_ppnt->p_type != PT_LOAD) |
1204 | 1204 |
continue; |
1205 |
|
|
1205 |
|
|
1206 | 1206 |
if (elf_ppnt->p_flags & PF_R) elf_prot |= PROT_READ; |
1207 | 1207 |
if (elf_ppnt->p_flags & PF_W) elf_prot |= PROT_WRITE; |
1208 | 1208 |
if (elf_ppnt->p_flags & PF_X) elf_prot |= PROT_EXEC; |
... | ... | |
1224 | 1224 |
} |
1225 | 1225 |
load_bias = TARGET_ELF_PAGESTART(error - elf_ppnt->p_vaddr); |
1226 | 1226 |
} |
1227 |
|
|
1227 |
|
|
1228 | 1228 |
error = target_mmap(TARGET_ELF_PAGESTART(load_bias + elf_ppnt->p_vaddr), |
1229 | 1229 |
(elf_ppnt->p_filesz + |
1230 | 1230 |
TARGET_ELF_PAGEOFFSET(elf_ppnt->p_vaddr)), |
... | ... | |
1242 | 1242 |
if (TARGET_ELF_PAGESTART(elf_ppnt->p_vaddr) < elf_stack) |
1243 | 1243 |
elf_stack = TARGET_ELF_PAGESTART(elf_ppnt->p_vaddr); |
1244 | 1244 |
#endif |
1245 |
|
|
1245 |
|
|
1246 | 1246 |
if (!load_addr_set) { |
1247 | 1247 |
load_addr_set = 1; |
1248 | 1248 |
load_addr = elf_ppnt->p_vaddr - elf_ppnt->p_offset; |
Also available in: Unified diff