From 89cd864e0c42a3a39706751482c2d1634d9337b4 Mon Sep 17 00:00:00 2001 From: Erik Hemming Date: Thu, 10 Feb 2011 21:22:48 +0100 Subject: [PATCH] android; export internal funcs + mono_file_map_override --- build_runtime_android.sh | 16 ++++++++-------- configure.in | 9 +++++++++ mono/metadata/domain-internals.h | 2 +- mono/metadata/gc-internal.h | 2 +- mono/metadata/object-internals.h | 2 +- mono/metadata/security-manager.h | 2 +- mono/metadata/threadpool.h | 2 +- mono/metadata/threads-types.h | 2 +- mono/metadata/verify-internals.h | 2 +- mono/mini/ldscript | 4 ++++ mono/utils/mono-filemap.c | 23 +++++++++++++++++++++++ mono/utils/mono-mmap.c | 5 +++++ mono/utils/mono-mmap.h | 9 +++++++++ 13 files changed, 65 insertions(+), 15 deletions(-) diff --git a/build_runtime_android.sh b/build_runtime_android.sh index 6fba52cd520..67ede8c7b62 100755 --- a/build_runtime_android.sh +++ b/build_runtime_android.sh @@ -3,7 +3,7 @@ # NB! Prereq : ANDROID_NDK_ROOT=/usr/local/android-ndk-xxx or similar # Todo: set appropriate ARM flags for hard floats -ANDROID_PLATFORM=android-5 +export ANDROID_PLATFORM=android-5 GCC_VERSION=4.4.0 OUTDIR=builds/embedruntimes/android PREFIX=`pwd`/builds/android @@ -106,9 +106,9 @@ function clean_build make && echo "Build SUCCESS!" || exit 1 - mkdir -p `dirname $3` - cp mono/mini/.libs/libmono.a $3.a - cp mono/mini/.libs/libmono.so $3.so + mkdir -p $3 + cp mono/mini/.libs/libmono.a $3 + cp mono/mini/.libs/libmono.so $3 } CCFLAGS_ARMv5_CPU="-DARM_FPU_NONE=1 -march=armv5te -mtune=xscale -msoft-float" @@ -119,11 +119,11 @@ LDFLAGS_ARMv7="-Wl,--fix-cortex-a8" rm -rf $OUTDIR -clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/libmono_armv5" -clean_build "$CCFLAGS_ARMv5_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/libmono_armv5_vfp" -clean_build "$CCFLAGS_ARMv7_VFP" "$LDFLAGS_ARMv7" "$OUTDIR/libmono_armv7a" +clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5" +clean_build "$CCFLAGS_ARMv5_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv5_vfp" +clean_build "$CCFLAGS_ARMv7_VFP" "$LDFLAGS_ARMv7" "$OUTDIR/armv7a" -NUM_LIBS_BUILT=`ls -Al $OUTDIR | grep libmono | wc -l` +NUM_LIBS_BUILT=`ls -AlR $OUTDIR | grep libmono | wc -l` if [ $NUM_LIBS_BUILT -eq 6 ]; then echo "Android STATIC/SHARED libraries are found here: $OUTDIR" else diff --git a/configure.in b/configure.in index fdc51f582e5..4a4fec99993 100644 --- a/configure.in +++ b/configure.in @@ -2351,6 +2351,15 @@ case "$host" in if test "x$X11" = "xlibX11.so"; then AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? WinForms may not work...]); fi + + case $ANDROID_PLATFORM in + android-*) + soname_spec='${libname}${release}${shared_ext}' + ;; + *) + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac ;; esac diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index 532f1593af2..479e992a8b1 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -478,7 +478,7 @@ gboolean mono_runtime_get_no_exec (void) MONO_INTERNAL; gboolean -mono_assembly_name_parse (const char *name, MonoAssemblyName *aname) MONO_INTERNAL; +mono_assembly_name_parse (const char *name, MonoAssemblyName *aname) /*MONO_INTERNAL*/; void mono_assembly_name_free (MonoAssemblyName *aname) MONO_INTERNAL; diff --git a/mono/metadata/gc-internal.h b/mono/metadata/gc-internal.h index f80180ec06c..bc28a429b59 100644 --- a/mono/metadata/gc-internal.h +++ b/mono/metadata/gc-internal.h @@ -98,7 +98,7 @@ void* mono_gc_alloc_fixed (size_t size, void *descr) MONO_INTERNAL; void mono_gc_free_fixed (void* addr) MONO_INTERNAL; /* make sure the gchandle was allocated for an object in domain */ -gboolean mono_gchandle_is_in_domain (guint32 gchandle, MonoDomain *domain) MONO_INTERNAL; +gboolean mono_gchandle_is_in_domain (guint32 gchandle, MonoDomain *domain) /*MONO_INTERNAL*/; void mono_gchandle_free_domain (MonoDomain *domain) MONO_INTERNAL; typedef void (*FinalizerThreadCallback) (gpointer user_data); diff --git a/mono/metadata/object-internals.h b/mono/metadata/object-internals.h index 6ef472d31be..2ce88cf9cbb 100644 --- a/mono/metadata/object-internals.h +++ b/mono/metadata/object-internals.h @@ -1428,7 +1428,7 @@ typedef enum { MonoRuntimeUnhandledExceptionPolicy mono_runtime_unhandled_exception_policy_get (void) MONO_INTERNAL; void -mono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy policy) MONO_INTERNAL; +mono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy policy) /*MONO_INTERNAL*/; MonoVTable * mono_class_try_get_vtable (MonoDomain *domain, MonoClass *class) MONO_INTERNAL; diff --git a/mono/metadata/security-manager.h b/mono/metadata/security-manager.h index 2548eed80df..a8d9e31da93 100644 --- a/mono/metadata/security-manager.h +++ b/mono/metadata/security-manager.h @@ -74,7 +74,7 @@ void mono_secman_inheritancedemand_class (MonoClass *klass, MonoClass *parent) M void mono_secman_inheritancedemand_method (MonoMethod *override, MonoMethod *base) MONO_INTERNAL; /* Security mode */ -void mono_security_set_mode (MonoSecurityMode mode) MONO_INTERNAL; +void mono_security_set_mode (MonoSecurityMode mode) /*MONO_INTERNAL*/; MonoSecurityMode mono_security_get_mode (void) MONO_INTERNAL; /* internal calls */ diff --git a/mono/metadata/threadpool.h b/mono/metadata/threadpool.h index edf35561ced..d05cf5aafbd 100644 --- a/mono/metadata/threadpool.h +++ b/mono/metadata/threadpool.h @@ -15,7 +15,7 @@ MonoObject * mono_thread_pool_finish (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc) MONO_INTERNAL; -void mono_thread_pool_cleanup (void) MONO_INTERNAL; +void mono_thread_pool_cleanup (void) /*MONO_INTERNAL*/; gboolean mono_thread_pool_remove_domain_jobs (MonoDomain *domain, int timeout) MONO_INTERNAL; diff --git a/mono/metadata/threads-types.h b/mono/metadata/threads-types.h index 71ea855913b..799b17b182b 100644 --- a/mono/metadata/threads-types.h +++ b/mono/metadata/threads-types.h @@ -159,7 +159,7 @@ gboolean mono_thread_test_state (MonoThread *thread, MonoThreadState test) MONO_ void mono_thread_init_apartment_state (void) MONO_INTERNAL; void mono_thread_cleanup_apartment_state (void) MONO_INTERNAL; -void mono_threads_set_shutting_down (void) MONO_INTERNAL; +void mono_threads_set_shutting_down (void) /*MONO_INTERNAL*/; gboolean mono_threads_is_shutting_down (void) MONO_INTERNAL; gunichar2* mono_thread_get_name (MonoThread *this_obj, guint32 *name_len) MONO_INTERNAL; diff --git a/mono/metadata/verify-internals.h b/mono/metadata/verify-internals.h index a95cc5d2d79..a48bfdee58e 100644 --- a/mono/metadata/verify-internals.h +++ b/mono/metadata/verify-internals.h @@ -12,7 +12,7 @@ typedef enum { MONO_VERIFIER_MODE_STRICT } MiniVerifierMode; -void mono_verifier_set_mode (MiniVerifierMode mode) MONO_INTERNAL; +void mono_verifier_set_mode (MiniVerifierMode mode) /*MONO_INTERNAL*/; void mono_verifier_enable_verify_all (void) MONO_INTERNAL; gboolean mono_verifier_is_enabled_for_image (MonoImage *image) MONO_INTERNAL; diff --git a/mono/mini/ldscript b/mono/mini/ldscript index c1d5cc45e8c..df7078a82a7 100644 --- a/mono/mini/ldscript +++ b/mono/mini/ldscript @@ -5,6 +5,10 @@ VER_1 { GC_start_blocking; GC_end_blocking; gc_thread_vtable; + GC_lookup_thread; + GC_delete_thread; + GC_notify_event; + g_free; local: *; }; diff --git a/mono/utils/mono-filemap.c b/mono/utils/mono-filemap.c index 4d0e266cf38..05061752831 100644 --- a/mono/utils/mono-filemap.c +++ b/mono/utils/mono-filemap.c @@ -22,9 +22,29 @@ #include "mono-mmap.h" +static MonoFileMapOpen file_open_func = 0; +static MonoFileMapSize file_size_func = 0; +static MonoFileMapFd file_fd_func = 0; +static MonoFileMapClose file_close_func = 0; + MonoFileMapMap file_map_func = 0; + MonoFileMapUnmap file_unmap_func = 0; + +#if defined(ANDROID) +void mono_file_map_override(MonoFileMapOpen open_func, MonoFileMapSize size_func, MonoFileMapFd fd_func, MonoFileMapClose close_func, MonoFileMapMap map_func, MonoFileMapUnmap unmap_func) +{ + file_open_func = open_func; + file_size_func = size_func; + file_fd_func = fd_func; + file_close_func = close_func; + file_map_func = map_func; + file_unmap_func = unmap_func; +} +#endif + MonoFileMap * mono_file_map_open (const char* name) { + if (file_open_func) return file_open_func(name); return (MonoFileMap *)fopen (name, "rb"); } @@ -32,6 +52,7 @@ guint64 mono_file_map_size (MonoFileMap *fmap) { struct stat stat_buf; + if (file_size_func) return file_size_func(fmap); if (fstat (fileno ((FILE*)fmap), &stat_buf) < 0) return 0; return stat_buf.st_size; @@ -40,12 +61,14 @@ mono_file_map_size (MonoFileMap *fmap) int mono_file_map_fd (MonoFileMap *fmap) { + if (file_fd_func) return file_fd_func(fmap); return fileno ((FILE*)fmap); } int mono_file_map_close (MonoFileMap *fmap) { + if (file_close_func) return file_close_func(fmap); return fclose ((FILE*)fmap); } diff --git a/mono/utils/mono-mmap.c b/mono/utils/mono-mmap.c index 41a0d00e588..a6991ac31bc 100644 --- a/mono/utils/mono-mmap.c +++ b/mono/utils/mono-mmap.c @@ -314,9 +314,13 @@ mono_vfree (void *addr, size_t length) * the memory area using mono_file_unmap (). * */ +extern MonoFileMapMap file_map_func; +extern MonoFileMapUnmap file_unmap_func; + void* mono_file_map (size_t length, int flags, int fd, guint64 offset, void **ret_handle) { + if (file_map_func) return file_map_func(length, flags, fd, offset, ret_handle); void *ptr; int mflags = 0; int prot = prot_from_flags (flags); @@ -350,6 +354,7 @@ mono_file_map (size_t length, int flags, int fd, guint64 offset, void **ret_hand int mono_file_unmap (void *addr, void *handle) { + if (file_unmap_func) return file_unmap_func(addr, handle); return munmap (addr, (size_t)handle); } diff --git a/mono/utils/mono-mmap.h b/mono/utils/mono-mmap.h index 69cad338fef..9c25f7be568 100644 --- a/mono/utils/mono-mmap.h +++ b/mono/utils/mono-mmap.h @@ -52,5 +52,14 @@ typedef void (*mono_file_map_release_fn) (void *addr); void mono_file_map_set_allocator (mono_file_map_alloc_fn alloc, mono_file_map_release_fn release); +typedef MonoFileMap* (*MonoFileMapOpen) (const char* name); +typedef guint64 (*MonoFileMapSize) (MonoFileMap *fmap); +typedef int (*MonoFileMapFd) (MonoFileMap *fmap); +typedef int (*MonoFileMapClose) (MonoFileMap *fmap); +typedef void * (*MonoFileMapMap) (size_t length, int flags, int fd, guint64 offset, void **ret_handle); +typedef int (*MonoFileMapUnmap) (void *addr, void *handle); + +void mono_file_map_override(MonoFileMapOpen open_func, MonoFileMapSize size_func, MonoFileMapFd fd_func, MonoFileMapClose close_func, MonoFileMapMap map_func, MonoFileMapUnmap unmap_func); + #endif /* __MONO_UTILS_MMAP_H__ */ -- GitLab