X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Foverride.c;h=c5b0a09d982de4503481b263d26e14c6ba52a818;hp=5a722d932e0f65740b60f1a6e8da1abf8726915b;hb=d5a3e1bccc54036e8b659f22dc704fa257f5734d;hpb=c3831532675b527bd34ee92377b1b6d323345cb1 diff --git a/loader/override.c b/loader/override.c index 5a722d9..c5b0a09 100644 --- a/loader/override.c +++ b/loader/override.c @@ -251,15 +251,20 @@ static UNUSED int w_execvp(const char *file, char *const argv[]) return emu_do_execve(file, argv, environ); } -// static note: this can't safely return because of the way it's patched in -// static note2: can't be used, execve hangs? -static UNUSED int w_execve(const char *filename, char *const argv[], - char *const envp[]) +long w_execve_raw(const char *filename, char * const argv[], + char * const envp[]) { strace("execve(%s, %p, %p) = ?\n", filename, argv, envp); return emu_do_execve(filename, argv, envp); } +static UNUSED int w_execve(const char *filename, char * const argv[], + char * const envp[]) +{ + long ret = w_execve_raw(filename, argv, envp); + return g_syscall_error(ret); +} + static int w_chdir(const char *path) { long ret; @@ -277,6 +282,7 @@ static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz) { long ret; +#ifndef DL if (path != NULL && strncmp(path, "/proc/", 6) == 0 && strcmp(strrchr(path, '/'), "/exe") == 0) { @@ -285,6 +291,7 @@ static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz) ret = bufsiz; } else +#endif ret = g_readlink_raw(path, buf, bufsiz); strace("readlink(%s, %s, %zd) = %ld\n", path, buf, bufsiz, ret); @@ -338,7 +345,7 @@ MAKE_WRAP_SYM_N(execlp); MAKE_WRAP_SYM_N(execle); MAKE_WRAP_SYM_N(execv); MAKE_WRAP_SYM_N(execvp); -MAKE_WRAP_SYM(execve); +MAKE_WRAP_SYM_N(execve); MAKE_WRAP_SYM_N(chdir); MAKE_WRAP_SYM_N(readlink); typeof(mmap) mmap2 __attribute__((alias("w_mmap"))); @@ -361,7 +368,7 @@ static const struct { REAL_FUNC_NP(tcsetattr), REAL_FUNC_NP(system), // exec* - skipped - REAL_FUNC_NP(execve), + //REAL_FUNC_NP(execve), //REAL_FUNC_NP(chdir), }; @@ -375,7 +382,7 @@ static const struct { #define tcgetattr p_real_tcgetattr #define tcsetattr p_real_tcsetattr #define system p_real_system -#define execve p_real_execve +//#define execve p_real_execve //#define chdir p_real_chdir #undef MAKE_WRAP_SYM @@ -458,7 +465,8 @@ int real_system(const char *command) int real_execve(const char *filename, char *const argv[], char *const envp[]) { - return execve(filename, argv, envp); + long ret = g_execve_raw(filename, argv, envp); + return g_syscall_error(ret); } int real_chdir(const char *path)