X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=loader%2Floader.c;h=8a021df8b33f1fcb1339bd3a7c74e7d3fcf9fd38;hb=cbd18fd2d426540a4101b7345c93f49b6fbbfa6d;hp=2d7d3d2ca1855e36e6394dd2e67de6848acb0337;hpb=c3831532675b527bd34ee92377b1b6d323345cb1;p=ginge.git diff --git a/loader/loader.c b/loader/loader.c index 2d7d3d2..8a021df 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -17,6 +17,7 @@ #include "realfuncs.h" char *bin_path; +char **g_argv; #define CHECK_(val, fail_operator, expect, err_msg) \ if (val fail_operator expect) { \ @@ -65,7 +66,7 @@ extern char **environ; int main(int argc, char *argv[]) { - void *lowest_segment = (void *)-1; + void *lowest_segments[2] = { NULL, NULL }; Elf32_Ehdr hdr; Elf32_Phdr *phdr; FILE *fi; @@ -81,6 +82,8 @@ int main(int argc, char *argv[]) return 1; } + g_argv = argv; + fi = fopen("/proc/self/maps", "r"); CHECK_NE(fi, NULL, "fopen maps"); @@ -157,8 +160,8 @@ int main(int argc, char *argv[]) do_patches((char *)ptr + align, phdr[i].p_filesz); } - if (map_ptr < lowest_segment) - lowest_segment = map_ptr; + if (lowest_segments[0] == NULL || map_ptr < lowest_segments[0]) + lowest_segments[0] = map_ptr; } // build self bin path @@ -174,7 +177,7 @@ int main(int argc, char *argv[]) fclose(fi); - emu_init(lowest_segment); + emu_init(lowest_segments, 0); // generate stack frame: argc, argv[], NULL, env[], NULL for (envc = 0; environ[envc] != NULL; envc++)