mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-18 06:28:59 +08:00
os_dep.c: Port to Darwin/i386
2006-09-21 Sandro Tolaini <tolaini@libero.it> * os_dep.c: Port to Darwin/i386 * darwin_stop_world.c: Likewise * include/private/gcconfig.h: Likewise From-SVN: r117126
This commit is contained in:
parent
b76d34e959
commit
de7a014db3
@ -1,3 +1,9 @@
|
||||
2006-09-21 Sandro Tolaini <tolaini@libero.it>
|
||||
|
||||
* os_dep.c: Port to Darwin/i386
|
||||
* darwin_stop_world.c: Likewise
|
||||
* include/private/gcconfig.h: Likewise
|
||||
|
||||
2006-06-07 Petr Salinger <Petr.Salinger@seznam.cz>
|
||||
|
||||
* configure.ac: add support for GNU/kFreeBSD, accepted by upstream
|
||||
|
@ -125,7 +125,18 @@ void GC_push_all_stacks() {
|
||||
(natural_t*)&state,
|
||||
&thread_state_count);
|
||||
if(r != KERN_SUCCESS) ABORT("thread_get_state failed");
|
||||
|
||||
|
||||
#if defined(I386)
|
||||
lo = state.esp;
|
||||
|
||||
GC_push_one(state.eax);
|
||||
GC_push_one(state.ebx);
|
||||
GC_push_one(state.ecx);
|
||||
GC_push_one(state.edx);
|
||||
GC_push_one(state.edi);
|
||||
GC_push_one(state.esi);
|
||||
GC_push_one(state.ebp);
|
||||
#elif defined(POWERPC)
|
||||
lo = (void*)(state . THREAD_FLD (r1) - PPC_RED_ZONE_SIZE);
|
||||
|
||||
GC_push_one(state . THREAD_FLD (r0));
|
||||
@ -159,6 +170,9 @@ void GC_push_all_stacks() {
|
||||
GC_push_one(state . THREAD_FLD (r29));
|
||||
GC_push_one(state . THREAD_FLD (r30));
|
||||
GC_push_one(state . THREAD_FLD (r31));
|
||||
#else
|
||||
# error FIXME for non-x86 || ppc architectures
|
||||
#endif
|
||||
} /* p != me */
|
||||
if(p->flags & MAIN_THREAD)
|
||||
hi = GC_stackbottom;
|
||||
|
@ -304,7 +304,7 @@
|
||||
# define mach_type_known
|
||||
# elif defined(__i386__)
|
||||
# define I386
|
||||
--> Not really supported, but at least we recognize it.
|
||||
# define mach_type_known
|
||||
# endif
|
||||
# endif
|
||||
# if defined(NeXT) && defined(mc68000)
|
||||
@ -1308,6 +1308,29 @@
|
||||
/* # define MPROTECT_VDB Not quite working yet? */
|
||||
# define DYNAMIC_LOADING
|
||||
# endif
|
||||
# ifdef DARWIN
|
||||
# define OS_TYPE "DARWIN"
|
||||
# define DARWIN_DONT_PARSE_STACK
|
||||
# define DYNAMIC_LOADING
|
||||
/* XXX: see get_end(3), get_etext() and get_end() should not be used.
|
||||
These aren't used when dyld support is enabled (it is by default) */
|
||||
# define DATASTART ((ptr_t) get_etext())
|
||||
# define DATAEND ((ptr_t) get_end())
|
||||
# define STACKBOTTOM ((ptr_t) 0xc0000000)
|
||||
# define USE_MMAP
|
||||
# define USE_MMAP_ANON
|
||||
# define USE_ASM_PUSH_REGS
|
||||
/* This is potentially buggy. It needs more testing. See the comments in
|
||||
os_dep.c. It relies on threads to track writes. */
|
||||
# ifdef GC_DARWIN_THREADS
|
||||
/* # define MPROTECT_VDB -- disabled for now. May work for some apps. */
|
||||
# endif
|
||||
# include <unistd.h>
|
||||
# define GETPAGESIZE() getpagesize()
|
||||
/* There seems to be some issues with trylock hanging on darwin. This
|
||||
should be looked into some more */
|
||||
# define NO_PTHREAD_TRYLOCK
|
||||
# endif /* DARWIN */
|
||||
# endif
|
||||
|
||||
# ifdef NS32K
|
||||
|
@ -3802,6 +3802,10 @@ catch_exception_raise(
|
||||
mach_msg_type_number_t exc_state_count = PPC_EXCEPTION_STATE64_COUNT;
|
||||
ppc_exception_state64_t exc_state;
|
||||
# endif
|
||||
# elif defined(I386)
|
||||
thread_state_flavor_t flavor = i386_EXCEPTION_STATE;
|
||||
mach_msg_type_number_t exc_state_count = i386_EXCEPTION_STATE_COUNT;
|
||||
i386_exception_state_t exc_state;
|
||||
# else
|
||||
# error FIXME for non-ppc darwin
|
||||
# endif
|
||||
@ -3833,7 +3837,13 @@ catch_exception_raise(
|
||||
}
|
||||
|
||||
/* This is the address that caused the fault */
|
||||
#if defined(POWERPC)
|
||||
addr = (char*) exc_state.dar;
|
||||
#elif defined (I386)
|
||||
addr = (char*) exc_state.faultvaddr;
|
||||
#else
|
||||
# error FIXME for non POWERPC/I386
|
||||
#endif
|
||||
|
||||
if((HDR(addr)) == 0) {
|
||||
/* Ugh... just like the SIGBUS problem above, it seems we get a bogus
|
||||
|
Loading…
Reference in New Issue
Block a user