diff options
author | ivmai <ivmai> | 2011-05-31 15:27:11 +0000 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2011-07-26 21:07:00 +0400 |
commit | 00b9b2b2b07d10d16bdfe6bdd7614e3064b0cc29 (patch) | |
tree | cc5bbc42963ef5597c03366c2a2603f6345d2fe0 /os_dep.c | |
parent | 52dd481a53d751d0557b7d0daa5fb2a6b55b7ab2 (diff) | |
download | bdwgc-00b9b2b2b07d10d16bdfe6bdd7614e3064b0cc29.tar.gz |
2011-05-31 Ivan Maidanski <ivmai@mail.ru>
* alloc.c (GC_add_current_malloc_heap, GC_build_back_graph,
GC_traverse_back_graph): Move prototype to gc_priv.h.
* checksums.c (GC_page_was_ever_dirty): Ditto.
* dbg_mlc.c (GC_default_print_heap_obj_proc): Ditto.
* dyn_load.c (GC_parse_map_entry, GC_get_maps,
GC_segment_is_thread_stack, GC_roots_present, GC_is_heap_base,
GC_get_next_stack): Ditto.
* finalize.c (GC_reset_finalizer_nested,
GC_check_finalizer_nested): Ditto.
* gcj_mlc.c (GC_start_debugging, GC_store_debug_info): Ditto.
* malloc.c (GC_extend_size_map, GC_text_mapping): Ditto.
* mark_rts.c (GC_mark_thread_local_free_lists): Ditto.
* misc.c (GC_register_main_static_data, GC_init_win32,
GC_setpagesize, GC_init_linux_data_start,
GC_set_and_save_fault_handler, GC_init_dyld, GC_init_netbsd_elf,
GC_initialize_offsets, GC_bl_init, GC_do_blocking_inner,
GC_bl_init_no_interiors): Ditto.
* os_dep.c (GC_greatest_stack_base_below, GC_push_all_stacks):
Ditto.
* reclaim.c (GC_check_leaked): Ditto.
* win32_threads.c (GC_gww_dirty_init): Ditto.
* darwin_stop_world.c (GC_is_mach_marker, GC_mprotect_stop,
GC_mprotect_resume): Move prototype to darwin_stop_world.h.
* pthread_support.c (GC_FindTopOfStack): Ditto.
* dyn_load.c (GC_cond_add_roots): Merge adjacent definitions.
* mark.c (GC_page_was_ever_dirty): Remove (as already declared).
* mark_rts.c (GC_roots_present): Change return type to void
pointer (to match the prototype); return NULL instead of FALSE.
* mark_rts.c (GC_add_roots_inner): Cast GC_roots_present() result.
* os_dep.c (NEED_PROC_MAPS): Move definition to gcconfig.h.
* os_dep.c (GC_write_fault_handler): Make STATIC.
* os_dep.c (GC_set_write_fault_handler): New function (only if
GC_WIN32_THREADS).
* pthread_start.c (GC_start_rtn_prepare_thread,
GC_thread_exit_proc): Move prototype to pthread_support.h.
* pthread_support.c (GC_nacl_initialize_gc_thread,
GC_nacl_shutdown_gc_thread, GC_unblock_gc_signals):
Ditto.
* pthread_support.c (GC_stop_init): Move prototype to
pthread_stop_world.h.
* thread_local_alloc.c (GC_check_tls_for): Reformat comment.
* win32_threads.c (GC_write_fault_handler): Remove prototype.
* win32_threads.c (GC_register_my_thread_inner): Call
GC_set_write_fault_handler instead of SetUnhandledExceptionFilter
(only if MPROTECT_VDB).
* doc/README.win32: Add information about DMC.
* include/private/gc_priv.h (GC_set_write_fault_handler): New
prototype (only if GC_WIN32_THREADS and MPROTECT_VDB).
Diffstat (limited to 'os_dep.c')
-rw-r--r-- | os_dep.c | 34 |
1 files changed, 13 insertions, 21 deletions
@@ -138,11 +138,6 @@ #define IGNORE_PAGES_EXECUTABLE 1 /* Undefined on GC_pages_executable real use. */ -#if defined(LINUX) && (defined(USE_PROC_FOR_LIBRARIES) || defined(IA64) \ - || !defined(SMALL_CONFIG)) -# define NEED_PROC_MAPS -#endif - #ifdef NEED_PROC_MAPS /* We need to parse /proc/self/maps, either to find dynamic libraries, */ /* and/or to find the register backing store base (IA64). Do it once */ @@ -474,7 +469,7 @@ GC_bool GC_enclosing_mapping(ptr_t addr, ptr_t *startp, ptr_t *endp) # endif /* LINUX */ GC_data_start = GC_find_limit((ptr_t)(_end), FALSE); } -#endif +#endif /* SEARCH_FOR_DATA_START */ #ifdef ECOS @@ -1220,11 +1215,6 @@ GC_INNER word GC_page_size = 0; # include <pthread.h> /* extern int pthread_getattr_np(pthread_t, pthread_attr_t *); */ -# ifdef IA64 - GC_INNER ptr_t GC_greatest_stack_base_below(ptr_t bound); - /* From pthread_support.c */ -# endif - GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *b) { pthread_attr_t attr; @@ -2555,16 +2545,11 @@ STATIC void GC_default_push_other_roots(void) # endif /* PCR */ - # if defined(GC_PTHREADS) || defined(GC_WIN32_THREADS) - -GC_INNER void GC_push_all_stacks(void); - -STATIC void GC_default_push_other_roots(void) -{ - GC_push_all_stacks(); -} - + STATIC void GC_default_push_other_roots(void) + { + GC_push_all_stacks(); + } # endif /* GC_WIN32_THREADS || GC_PTHREADS */ # ifdef SN_TARGET_PS3 @@ -3096,7 +3081,7 @@ STATIC void GC_default_push_other_roots(void) == STATUS_ACCESS_VIOLATION) # define CODE_OK (exc_info -> ExceptionRecord -> ExceptionInformation[0] \ == 1) /* Write fault */ - GC_INNER LONG WINAPI GC_write_fault_handler( + STATIC LONG WINAPI GC_write_fault_handler( struct _EXCEPTION_POINTERS *exc_info) # endif /* MSWIN32 || MSWINCE */ { @@ -3209,6 +3194,13 @@ STATIC void GC_default_push_other_roots(void) ABORT("Unexpected bus error or segmentation fault"); # endif } + +# ifdef GC_WIN32_THREADS + GC_INNER void GC_set_write_fault_handler(void) + { + SetUnhandledExceptionFilter(GC_write_fault_handler); + } +# endif #endif /* !DARWIN */ /* We hold the allocation lock. We expect block h to be written */ |