summaryrefslogtreecommitdiff
path: root/os_dep.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2012-03-18 16:04:58 +0400
committerIvan Maidanski <ivmai@mail.ru>2012-03-18 17:34:09 +0400
commitea176a3ab6d5af6e14e7e035f9e75f2668b453c9 (patch)
treeb8d6512d1c0e77a695f4d95965338a09222a4466 /os_dep.c
parent83231d0ab5ed60015797c3d1ad9056295ac3b2bb (diff)
parent18d7a44491eca2d429e6d468200da524a598d52b (diff)
downloadbdwgc-ea176a3ab6d5af6e14e7e035f9e75f2668b453c9.tar.gz
Merge with symbian_libgc_7x branch
Diffstat (limited to 'os_dep.c')
-rw-r--r--os_dep.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/os_dep.c b/os_dep.c
index c06728d6..04154edb 100644
--- a/os_dep.c
+++ b/os_dep.c
@@ -61,7 +61,8 @@
# include <signal.h>
#endif
-#if defined(UNIX_LIKE) || defined(CYGWIN32) || defined(NACL)
+#if defined(UNIX_LIKE) || defined(CYGWIN32) || defined(NACL) \
+ || defined(SYMBIAN)
# include <fcntl.h>
#endif
@@ -1147,6 +1148,13 @@ GC_INNER word GC_page_size = 0;
return STACKBOTTOM;
}
# define GET_MAIN_STACKBASE_SPECIAL
+#elif defined(SYMBIAN)
+ extern int GC_get_main_symbian_stack_base(void);
+ ptr_t GC_get_main_stack_base(void)
+ {
+ return (ptr_t)GC_get_main_symbian_stack_base();
+ }
+# define GET_MAIN_STACKBASE_SPECIAL
#elif !defined(BEOS) && !defined(AMIGA) && !defined(OS2) \
&& !defined(MSWIN32) && !defined(MSWINCE) && !defined(CYGWIN32) \
&& !defined(GC_OPENBSD_THREADS) \
@@ -2055,6 +2063,10 @@ void GC_register_data_segments(void)
# define HEAP_START ((ptr_t)0)
#endif
+#ifdef SYMBIAN
+ extern char* GC_get_private_path_and_zero_file(void);
+#endif
+
STATIC ptr_t GC_unix_mmap_get_mem(word bytes)
{
void *result;
@@ -2064,7 +2076,13 @@ STATIC ptr_t GC_unix_mmap_get_mem(word bytes)
static GC_bool initialized = FALSE;
if (!EXPECT(initialized, TRUE)) {
+# ifdef SYMBIAN
+ char* path = GC_get_private_path_and_zero_file();
+ zero_fd = open(path, O_RDWR | O_CREAT, 0666);
+ free(path);
+# else
zero_fd = open("/dev/zero", O_RDONLY);
+# endif
fcntl(zero_fd, F_SETFD, FD_CLOEXEC);
initialized = TRUE;
}