X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Foverride.c;h=86de405328be48f2cace73f90beef415a855cd01;hp=4ba40184ac667ebb07171c954534608dbc42b200;hb=3ef07128a8ad8a12688beee244c5e0a2629581de;hpb=499bf01c2f0e075caeb23714e3376a641c04eb7c diff --git a/loader/override.c b/loader/override.c index 4ba4018..86de405 100644 --- a/loader/override.c +++ b/loader/override.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "realfuncs.h" #include "header.h" @@ -36,7 +37,7 @@ static const struct dev_fd_t takeover_devs[] = { { "/dev/fb1", FAKEDEV_FB1 }, { "/dev/fb/1", FAKEDEV_FB1 }, { "/dev/mmuhack", FAKEDEV_MMUHACK }, - { "/dev/tty", -1 }, // XXX hmh.. + { "/dev/tty", FAKEDEV_TTY0 }, { "/dev/tty0", FAKEDEV_TTY0 }, #ifdef PND { "/dev/input/event*", -1 }, // hide for now, may cause dupe events @@ -99,6 +100,18 @@ static void *w_mmap(void *addr, size_t length, int prot, int flags, int fd, off_ } #define w_mmap2 w_mmap +static int w_munmap(void *addr, size_t length) +{ + int ret; + ret = emu_do_munmap(addr, length); + if (ret == -EAGAIN) + ret = munmap(addr, length); + + if (((long)&ret & 0xf0000000) == 0xb0000000) + strace("munmap(%p, %x) = %d\n", addr, length, ret); + return ret; +} + static ssize_t w_read(int fd, void *buf, size_t count) { ssize_t ret; @@ -227,6 +240,7 @@ static int w_chdir(const char *path) #undef open #undef fopen #undef mmap +#undef munmap #undef read #undef ioctl #undef sigaction @@ -256,6 +270,7 @@ static int w_chdir(const char *path) MAKE_WRAP_SYM(open); MAKE_WRAP_SYM(fopen); MAKE_WRAP_SYM(mmap); +MAKE_WRAP_SYM(munmap); MAKE_WRAP_SYM(read); MAKE_WRAP_SYM(ioctl); MAKE_WRAP_SYM(sigaction); @@ -281,6 +296,7 @@ static const struct { REAL_FUNC_NP(open), REAL_FUNC_NP(fopen), REAL_FUNC_NP(mmap), + REAL_FUNC_NP(munmap), REAL_FUNC_NP(read), REAL_FUNC_NP(ioctl), REAL_FUNC_NP(sigaction), @@ -295,6 +311,7 @@ static const struct { #define open p_real_open #define fopen p_real_fopen #define mmap p_real_mmap +#define munmap p_real_munmap #define read p_real_read #define ioctl p_real_ioctl #define sigaction p_real_sigaction @@ -331,6 +348,11 @@ void *real_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t of return mmap(addr, length, prot, flags, fd, offset); } +int real_munmap(void *addr, size_t length) +{ + return munmap(addr, length); +} + int real_read(int fd, void *buf, size_t count) { return read(fd, buf, count);