Rev 3562 | Rev 3686 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3562 | Rev 3681 | ||
|---|---|---|---|
| Line 124... | Line 124... | ||
| 124 | close(fd); |
124 | close(fd); |
| 125 | 125 | ||
| 126 | return rc; |
126 | return rc; |
| 127 | } |
127 | } |
| 128 | 128 | ||
| 129 | /** Run an ELF executable. |
- | |
| 130 | * |
- | |
| 131 | * Transfers control to the entry point of an ELF executable loaded |
- | |
| 132 | * earlier with elf_load_file(). This function does not return. |
- | |
| 133 | * |
- | |
| 134 | * @param info Info structure filled earlier by elf_load_file() |
- | |
| 135 | */ |
- | |
| 136 | void elf_run(elf_info_t *info, pcb_t *pcb) |
- | |
| 137 | { |
- | |
| 138 | program_run(info->entry, pcb); |
- | |
| 139 | - | ||
| 140 | /* not reached */ |
- | |
| 141 | } |
- | |
| 142 | - | ||
| 143 | /** Create the program control block (PCB). |
129 | /** Create the program control block (PCB). |
| 144 | * |
130 | * |
| 145 | * Fills the program control block @a pcb with information from |
131 | * Fills the program control block @a pcb with information from |
| 146 | * @a info. |
132 | * @a info. |
| 147 | * |
133 | * |
| Line 307... | Line 293... | ||
| 307 | break; |
293 | break; |
| 308 | case PT_LOAD: |
294 | case PT_LOAD: |
| 309 | return load_segment(elf, entry); |
295 | return load_segment(elf, entry); |
| 310 | break; |
296 | break; |
| 311 | case PT_INTERP: |
297 | case PT_INTERP: |
| 312 | /* Assume silently interp == "/lib/rtld" */ |
298 | /* Assume silently interp == "/app/dload" */ |
| 313 | elf->info->interp = "/lib/rtld"; |
299 | elf->info->interp = "/app/dload"; |
| 314 | break; |
300 | break; |
| 315 | case PT_DYNAMIC: |
301 | case PT_DYNAMIC: |
| 316 | case PT_SHLIB: |
302 | case PT_SHLIB: |
| 317 | case PT_NOTE: |
303 | case PT_NOTE: |
| 318 | case PT_LOPROC: |
304 | case PT_LOPROC: |