X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Fdl.c;h=b12c92134f0e0989ec9034b0ee4772521a1b04c5;hp=154e01236bd173bfa7e1549e908f377f2a152bc4;hb=eb058b482d306017c5efa176351c36180c6c8b85;hpb=7fd42181a7f66b4403076cd9de98e18140a7eaf8 diff --git a/loader/dl.c b/loader/dl.c index 154e012..b12c921 100644 --- a/loader/dl.c +++ b/loader/dl.c @@ -9,6 +9,14 @@ #define DL #include "override.c" +static void next_line(FILE *f) +{ + int c; + do { + c = fgetc(f); + } while (c != EOF && c != '\n'); +} + __attribute__((constructor)) static void ginge_init(void) { @@ -32,7 +40,7 @@ static void ginge_init(void) exit(1); } - ret = fscanf(f, "%x-%x %*s %*s %*s %*s %*s\n", &start, &end); + ret = fscanf(f, "%x-%x ", &start, &end); if (ret != 2) { perror("parse maps"); exit(1); @@ -46,6 +54,8 @@ static void ginge_init(void) perror("warning: mprotect"); while (1) { + next_line(f); + ret = fscanf(f, "%x-%*s %*s %*s %*s %*s %*s\n", &start); if (ret <= 0) break; @@ -62,6 +72,11 @@ static void ginge_init(void) #endif fclose(f); + // remove self from preload, further commands (from system() and such) + // will be handled by ginge_prep. + unsetenv("LD_PRELOAD"); + unsetenv("LD_LIBRARY_PATH"); + emu_init((void *)lowest_segment); }