42,6 → 42,7 |
|
#include <elf.h> |
#include <elf_load.h> |
#include <pcb.h> |
|
#define RTLD_BIAS 0x80000 |
|
50,6 → 51,7 |
elf_info_t prog_info; |
elf_info_t interp_info; |
char *file_name; |
pcb_t *pcb; |
int rc; |
|
printf("This is loader\n"); |
57,8 → 59,8 |
|
printf("Load program\n"); |
|
// rc = elf_load_file("/dltest", 0, &prog_info); |
rc = elf_load_file("/tetris", 0, &prog_info); |
rc = elf_load_file("/dltest", 0, &prog_info); |
// rc = elf_load_file("/tetris", 0, &prog_info); |
if (rc < 0) { |
printf("failed to load program\n"); |
return 1; |
71,7 → 73,7 |
|
// getchar(); |
|
/* printf("Load dynamic linker\n"); |
printf("Load dynamic linker\n"); |
file_name = "/rtld.so"; |
printf("open and read '%s'...\n", file_name); |
rc = elf_load_file(file_name, RTLD_BIAS, &interp_info); |
80,9 → 82,16 |
return 1; |
} |
|
/* |
* Provide rtld with some useful data |
*/ |
pcb = (pcb_t *)PCB_ADDRESS; |
pcb->rtld_dynamic = interp_info.dynamic; |
pcb->rtld_bias = RTLD_BIAS; |
|
printf("run dynamic linker\n"); |
elf_run(&interp_info); |
*/ |
|
/* not reached */ |
return 0; |
} |