diff options
| author | ptitSeb <seebastien.chev@gmail.com> | 2023-09-02 11:56:20 +0200 |
|---|---|---|
| committer | ptitSeb <seebastien.chev@gmail.com> | 2023-09-02 11:56:20 +0200 |
| commit | 2d37575f3d56931a9d20217fd508147f6601796b (patch) | |
| tree | 78da0acc44e8d95917402e0ea0abc97304481e73 /src/wrapped | |
| parent | eb1e607b935a1c90c0c9cf0b352d95423e42740d (diff) | |
| download | box64-2d37575f3d56931a9d20217fd508147f6601796b.tar.gz box64-2d37575f3d56931a9d20217fd508147f6601796b.zip | |
[ANDROID] Try to create an Android build, porting box86 Android build
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibctypes.h | 2 | ||||
| -rwxr-xr-x | src/wrapped/wrappedandroidshmem.c | 18 | ||||
| -rwxr-xr-x | src/wrapped/wrappedandroidshmem_private.h | 8 | ||||
| -rw-r--r-- | src/wrapped/wrappedfreetype.c | 8 | ||||
| -rw-r--r-- | src/wrapped/wrappedgnutls.c | 8 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 115 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc_private.h | 13 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibcups.c | 9 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibm.c | 9 | ||||
| -rw-r--r-- | src/wrapped/wrappedmpg123.c | 8 |
11 files changed, 182 insertions, 18 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 8f8dc38b..2716c3a6 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -3897,6 +3897,8 @@ wrappedlibc: - __vsyslog_chk - vFpLLp: - qsort +- vFpppp: + - __libc_init - iFiiip: - epoll_ctl - iFiiiN: diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index 508a16f6..e7a08c3e 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -58,6 +58,7 @@ typedef void* (*pFppV_t)(void*, void*, ...); typedef void (*vFiipV_t)(int32_t, int32_t, void*, ...); typedef void (*vFiipA_t)(int32_t, int32_t, void*, va_list); typedef void (*vFpLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef void (*vFpppp_t)(void*, void*, void*, void*); typedef int32_t (*iFiiip_t)(int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiiN_t)(int32_t, int32_t, int32_t, ...); typedef int32_t (*iFiipV_t)(int32_t, int32_t, void*, ...); @@ -228,6 +229,7 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(__syslog_chk, vFiipV_t) \ GO(__vsyslog_chk, vFiipA_t) \ GO(qsort, vFpLLp_t) \ + GO(__libc_init, vFpppp_t) \ GO(epoll_ctl, iFiiip_t) \ GO(semctl, iFiiiN_t) \ GO(__dprintf_chk, iFiipV_t) \ diff --git a/src/wrapped/wrappedandroidshmem.c b/src/wrapped/wrappedandroidshmem.c new file mode 100755 index 00000000..106524d9 --- /dev/null +++ b/src/wrapped/wrappedandroidshmem.c @@ -0,0 +1,18 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> + +#include "wrappedlibs.h" + +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x86emu.h" + +const char* androidshmemName = "libandroid-shmem.so"; +#define LIBNAME androidshmem + +#include "wrappedlib_init.h" + diff --git a/src/wrapped/wrappedandroidshmem_private.h b/src/wrapped/wrappedandroidshmem_private.h new file mode 100755 index 00000000..84f29a81 --- /dev/null +++ b/src/wrapped/wrappedandroidshmem_private.h @@ -0,0 +1,8 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +GO(shmctl, iFiip) +GO(shmget, iFiLi) +GO(shmat, pFipi) +GO(shmdt, iFp) diff --git a/src/wrapped/wrappedfreetype.c b/src/wrapped/wrappedfreetype.c index 4ced9be3..86706b45 100644 --- a/src/wrapped/wrappedfreetype.c +++ b/src/wrapped/wrappedfreetype.c @@ -18,7 +18,13 @@ #include "emu/x64emu_private.h" #include "myalign.h" -const char* freetypeName = "libfreetype.so.6"; +const char* freetypeName = +#ifdef ANDROID + "libfreetype.so" +#else + "libfreetype.so.6" +#endif + ; #define LIBNAME freetype typedef void (*vFp_t)(void*); diff --git a/src/wrapped/wrappedgnutls.c b/src/wrapped/wrappedgnutls.c index dd4cde20..1edf28de 100644 --- a/src/wrapped/wrappedgnutls.c +++ b/src/wrapped/wrappedgnutls.c @@ -18,7 +18,13 @@ #include "emu/x64emu_private.h" #include "callback.h" -const char* gnutlsName = "libgnutls.so.30"; +const char* gnutlsName = +#if ANDROID + "libgnutls.so" +#else + "libgnutls.so.30" +#endif + ; #define LIBNAME gnutls #include "generated/wrappedgnutlstypes.h" diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index b0241375..156eab8f 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -65,7 +65,13 @@ #include "rcfile.h" #define LIBNAME libc -const char* libcName = "libc.so.6"; +const char* libcName = +#ifdef ANDROID + "libc.so" +#else + "libc.so.6" +#endif + ; typedef int (*iFi_t)(int); typedef int (*iFp_t)(void*); @@ -1271,6 +1277,50 @@ EXPORT int my_statfs64(const char* path, void* buf) } #endif +#ifdef ANDROID +typedef int (*__compar_d_fn_t)(const void*, const void*, void*); + +static size_t qsort_r_partition(void* base, size_t size, __compar_d_fn_t compar, void* arg, size_t lo, size_t hi) +{ + void* tmp = alloca(size); + void* pivot = ((char*)base) + lo * size; + size_t i = lo; + for (size_t j = lo; j <= hi; j++) + { + void* base_i = ((char*)base) + i * size; + void* base_j = ((char*)base) + j * size; + if (compar(base_j, pivot, arg) < 0) + { + memcpy(tmp, base_i, size); + memcpy(base_i, base_j, size); + memcpy(base_j, tmp, size); + i++; + } + } + void* base_i = ((char *)base) + i * size; + void* base_hi = ((char *)base) + hi * size; + memcpy(tmp, base_i, size); + memcpy(base_i, base_hi, size); + memcpy(base_hi, tmp, size); + return i; +} + +static void qsort_r_helper(void* base, size_t size, __compar_d_fn_t compar, void* arg, ssize_t lo, ssize_t hi) +{ + if (lo < hi) + { + size_t p = qsort_r_partition(base, size, compar, arg, lo, hi); + qsort_r_helper(base, size, compar, arg, lo, p - 1); + qsort_r_helper(base, size, compar, arg, p + 1, hi); + } +} + +static void qsort_r(void* base, size_t nmemb, size_t size, __compar_d_fn_t compar, void* arg) +{ + return qsort_r_helper(base, size, compar, arg, 0, nmemb - 1); +} +#endif + typedef struct compare_r_s { x64emu_t* emu; uintptr_t f; @@ -1601,6 +1651,15 @@ void CreateCPUInfoFile(int fd) #undef P } +#ifdef ANDROID +static int shm_open(const char *name, int oflag, mode_t mode) { + return -1; +} +static int shm_unlink(const char *name) { + return -1; +} +#endif + #define TMP_CPUINFO "box64_tmpcpuinfo" #define TMP_CPUTOPO "box64_tmpcputopo%d" #endif @@ -1843,12 +1902,14 @@ EXPORT int32_t my_epoll_pwait(x64emu_t* emu, int32_t epfd, void* events, int32_t } #endif +#ifndef ANDROID EXPORT int32_t my_glob64(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) { (void)emu; return glob64(pat, flags, findgloberrFct(errfnc), pglob); } EXPORT int32_t my_glob(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) __attribute__((alias("my_glob64"))); +#endif EXPORT int my_scandir64(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) { @@ -2439,6 +2500,11 @@ void InitCpuModel() } #endif +#ifdef ANDROID +void ctSetup() +{ +} +#else EXPORT const unsigned short int *my___ctype_b; EXPORT const int32_t *my___ctype_tolower; EXPORT const int32_t *my___ctype_toupper; @@ -2449,6 +2515,7 @@ void ctSetup() my___ctype_toupper = *(__ctype_toupper_loc()); my___ctype_tolower = *(__ctype_tolower_loc()); } +#endif EXPORT void my___register_frame_info(void* a, void* b) { @@ -2759,6 +2826,7 @@ EXPORT int my_getopt_long_only(int argc, char* const argv[], const char* optstri return ret; } +#ifndef ANDROID typedef struct { void *read; void *write; @@ -2806,6 +2874,7 @@ EXPORT void* my_fopencookie(x64emu_t* emu, void* cookie, void* mode, my_cookie_i cb->cookie = cookie; return fopencookie(cb, mode, io_funcs); } +#endif #if 0 @@ -2869,8 +2938,13 @@ EXPORT int my_nanosleep(const struct timespec *req, struct timespec *rem) } #endif +#ifdef ANDROID +void obstackSetup() { +} +#else // all obstack function defined in obstack.c file void obstackSetup(); +#endif EXPORT void* my_malloc(unsigned long size) { @@ -2959,6 +3033,7 @@ EXPORT void my_mcount(void* frompc, void* selfpc) } #endif +#ifndef ANDROID union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ @@ -2966,6 +3041,7 @@ union semun { struct seminfo *__buf; /* Buffer for IPC_INFO (Linux-specific) */ }; +#endif #ifndef SEM_STAT_ANY #define SEM_STAT_ANY 20 #endif @@ -3002,6 +3078,7 @@ EXPORT int my_ptrace(x64emu_t* emu, int request, pid_t pid, void* addr, void* da // Backtrace stuff +#ifndef ANDROID #include "elfs/elfdwarf_private.h" EXPORT int my_backtrace(x64emu_t* emu, void** buffer, int size) { @@ -3127,6 +3204,7 @@ EXPORT void my_backtrace_symbols_fd(x64emu_t* emu, uintptr_t* buffer, int size, (void)dummy; } } +#endif EXPORT int my_iopl(x64emu_t* emu, int level) { @@ -3320,6 +3398,27 @@ EXPORT char my___libc_single_threaded = 0; lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ else +#ifdef ANDROID +#define NEEDED_LIBS 0 +#define NEEDED_LIBS_234 3, \ + "libpthread.so.0", \ + "libdl.so.2" , \ + "libm.so" +#else +#define NEEDED_LIBS 4,\ + "ld-linux-x86-64.so.2", \ + "libpthread.so.0", \ + "libutil.so.1", \ + "librt.so.1" +#define NEEDED_LIBS_234 6, \ + "ld-linux-x86-64.so.2", \ + "libpthread.so.0", \ + "libdl.so.2", \ + "libutil.so.1", \ + "libresolv.so.2", \ + "librt.so.1" +#endif + #define CUSTOM_INIT \ box64->libclib = lib; \ /*InitCpuModel();*/ \ @@ -3331,19 +3430,9 @@ EXPORT char my___libc_single_threaded = 0; strrchr(box64->argv[0], '/') + 1; \ getMy(lib); \ if(box64_isglibc234) \ - setNeededLibs(lib, 6, \ - "ld-linux-x86-64.so.2", \ - "libpthread.so.0", \ - "libdl.so.2", \ - "libutil.so.1", \ - "libresolv.so.2", \ - "librt.so.1"); \ + setNeededLibs(lib, NEEDED_LIBS_234); \ else \ - setNeededLibs(lib, 4, \ - "ld-linux-x86-64.so.2", \ - "libpthread.so.0", \ - "libutil.so.1", \ - "librt.so.1"); + setNeededLibs(lib, NEEDED_LIBS); #define CUSTOM_FINI \ freeMy(); diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index 933178e5..efd5705b 100644 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -2326,3 +2326,16 @@ DATAM(__libc_single_threaded, 1) GO(iconvctl, iFlip) GO(dummy__ZnwmSt11align_val_tRKSt9nothrow_t, pFLLp) // for mallochook.c + +#ifdef ANDROID +GOM(__libc_init, vFEpppp) +GO(__errno, pFv) +GO(setprogname, vFp) +GO(getprogname, pFv) +#else +// Those symbols don't exist in non-Android builds +//GOM(__libc_init, +//GO(__errno, +//GO(setprogname, +//GO(getprogname, +#endif diff --git a/src/wrapped/wrappedlibcups.c b/src/wrapped/wrappedlibcups.c index 16ea4725..dc846868 100644 --- a/src/wrapped/wrappedlibcups.c +++ b/src/wrapped/wrappedlibcups.c @@ -18,7 +18,14 @@ #include "emu/x64emu_private.h" #include "myalign.h" -const char* libcupsName = "libcups.so.2"; +const char* libcupsName = +#ifdef ANDROID + "libcups.so" +#else + "libcups.so.2" +#endif + ; + #define LIBNAME libcups #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped/wrappedlibm.c b/src/wrapped/wrappedlibm.c index 43bdf5cc..0e4f4cf9 100644 --- a/src/wrapped/wrappedlibm.c +++ b/src/wrapped/wrappedlibm.c @@ -14,7 +14,14 @@ #include "x64emu.h" #include "debug.h" -const char* libmName = "libm.so.6"; +const char* libmName = +#ifdef ANDROID + "libm.so" +#else + "libm.so.6" +#endif + ; + #define LIBNAME libm static library_t* my_lib = NULL; diff --git a/src/wrapped/wrappedmpg123.c b/src/wrapped/wrappedmpg123.c index 5b95749e..dc538abf 100644 --- a/src/wrapped/wrappedmpg123.c +++ b/src/wrapped/wrappedmpg123.c @@ -17,7 +17,13 @@ #include "box64context.h" #include "emu/x64emu_private.h" -const char* mpg123Name = "libmpg123.so.0"; +const char* mpg123Name = +#ifdef ANDROID + "libmpg123.so" +#else + "libmpg123.so.0" +#endif + ; #define LIBNAME mpg123 #define ADDED_FUNCTIONS() \ |