From 1c46420fdb3c2ecdb59bd1560903330295a6858e Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Sat, 9 Feb 2002 00:50:05 +0000 Subject: xscale-elf support git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@49626 138bc75d-0d04-0410-961f-82ee72b054a4 --- boehm-gc/ChangeLog | 11 ++++ boehm-gc/include/private/gcconfig.h | 16 ++++++ boehm-gc/misc.c | 15 ++++-- boehm-gc/os_dep.c | 101 ++++++++++++++++++------------------ 4 files changed, 89 insertions(+), 54 deletions(-) (limited to 'boehm-gc') diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index e167429a413..2e03111751e 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,14 @@ +2001-02-08 Anthony Green + + * include/private/gcconfig.h: Add XSCALE NOSYS support for bare + board embedded targets. + * os_dep.c: Avoid signal handling code for NOSYS/ECOS targets. + Use GC_get_stack_base for NOSYS/ECOS targets. Clean up some + redundant uses of ECOS. + * misc.c: Use NOSYS where ECOS is being used. + Don't define GC_write twice for ECOS systems. + (GC_write): New function for NOSYS targets. + 2002-02-06 Adam Megacz * boehm-gc/include/gc.h: (GC_CreateThread) This function is diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h index 1c92ee31f2f..647bd5af3f7 100644 --- a/boehm-gc/include/private/gcconfig.h +++ b/boehm-gc/include/private/gcconfig.h @@ -39,6 +39,13 @@ # endif /* Determine the machine type: */ +# if defined(__XSCALE__) +# define ARM32 +# if !defined(LINUX) +# define NOSYS +# define mach_type_known +# endif +# endif # if defined(sun) && defined(mc68000) # define M68K # define SUNOS4 @@ -1495,6 +1502,15 @@ # define OS_TYPE "MSWINCE" # define DATAEND /* not needed */ # endif +# ifdef NOSYS + /* __data_start is usually defined in the target linker script. */ + extern int __data_start; +# define DATASTART (ptr_t)(&__data_start) +# define USE_GENERIC_PUSH_REGS + /* __stack_base__ is set in newlib/libc/sys/arm/crt0.S */ + extern void *__stack_base__; +# define STACKBOTTOM ((ptr_t) (__stack_base__)) +# endif #endif # ifdef SH diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c index 06d7085d06e..842d9a669bb 100644 --- a/boehm-gc/misc.c +++ b/boehm-gc/misc.c @@ -69,7 +69,7 @@ # endif # endif -#ifdef ECOS +#if defined(NOSYS) || defined(ECOS) #undef STACKBASE #endif @@ -744,7 +744,8 @@ int GC_tmp; /* Should really be local ... */ # endif #endif -#if !defined(MSWIN32) && !defined(MSWINCE) && !defined(OS2) && !defined(MACOS) +#if !defined(MSWIN32) && !defined(MSWINCE) && !defined(OS2) \ + && !defined(MACOS) && !defined(ECOS) && !defined(NOSYS) int GC_write(fd, buf, len) int fd; GC_CONST char *buf; @@ -767,7 +768,7 @@ size_t len; } #endif /* UN*X */ -#if defined(ECOS) +#ifdef ECOS int GC_write(fd, buf, len) { _Jv_diag_write (buf, len); @@ -775,6 +776,14 @@ int GC_write(fd, buf, len) } #endif +#ifdef NOSYS +int GC_write(fd, buf, len) +{ + /* No writing. */ + return len; +} +#endif + #if defined(MSWIN32) || defined(MSWINCE) # define WRITE(f, buf, len) GC_write(buf, len) diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c index cc816dff07f..a84a80816f4 100644 --- a/boehm-gc/os_dep.c +++ b/boehm-gc/os_dep.c @@ -333,7 +333,8 @@ void GC_enable_signals(void) # if !defined(PCR) && !defined(AMIGA) && !defined(MSWIN32) \ && !defined(MSWINCE) \ - && !defined(MACOS) && !defined(DJGPP) && !defined(DOS4GW) + && !defined(MACOS) && !defined(DJGPP) && !defined(DOS4GW) \ + && !defined(NOSYS) && !defined(ECOS) # if defined(sigmask) && !defined(UTS4) && !defined(HURD) /* Use the traditional BSD interface */ @@ -516,7 +517,7 @@ ptr_t GC_get_stack_base() # undef GC_AMIGA_SB # endif /* AMIGA */ -# if defined(NEED_FIND_LIMIT) || (defined(UNIX_LIKE) && !defined(ECOS)) +# if defined(NEED_FIND_LIMIT) || defined(UNIX_LIKE) # ifdef __STDC__ typedef void (*handler)(int); @@ -540,8 +541,7 @@ ptr_t GC_get_stack_base() handler h; # endif { -# ifndef ECOS -# if defined(SUNOS5SIGS) || defined(IRIX5) \ +# if defined(SUNOS5SIGS) || defined(IRIX5) \ || defined(OSF1) || defined(HURD) struct sigaction act; @@ -579,7 +579,6 @@ ptr_t GC_get_stack_base() old_bus_handler = signal(SIGBUS, h); # endif # endif -# endif /* ECOS */ } # endif /* NEED_FIND_LIMIT || UNIX_LIKE */ @@ -602,21 +601,19 @@ ptr_t GC_get_stack_base() void GC_reset_fault_handler() { -# ifndef ECOS -# if defined(SUNOS5SIGS) || defined(IRIX5) \ - || defined(OSF1) || defined(HURD) - (void) sigaction(SIGSEGV, &old_segv_act, 0); -# if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \ - || defined(HPUX) || defined(HURD) - (void) sigaction(SIGBUS, &old_bus_act, 0); -# endif -# else - (void) signal(SIGSEGV, old_segv_handler); -# ifdef SIGBUS - (void) signal(SIGBUS, old_bus_handler); -# endif -# endif -# endif /* ECOS */ +# if defined(SUNOS5SIGS) || defined(IRIX5) \ + || defined(OSF1) || defined(HURD) + (void) sigaction(SIGSEGV, &old_segv_act, 0); +# if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \ + || defined(HPUX) || defined(HURD) + (void) sigaction(SIGBUS, &old_bus_act, 0); +# endif +# else + (void) signal(SIGSEGV, old_segv_handler); +# ifdef SIGBUS + (void) signal(SIGBUS, old_bus_handler); +# endif +# endif } /* Return the first nonaddressible location > p (up) or */ @@ -625,39 +622,41 @@ ptr_t GC_get_stack_base() ptr_t p; GC_bool up; { -# ifndef ECOS - static VOLATILE ptr_t result; - /* Needs to be static, since otherwise it may not be */ - /* preserved across the longjmp. Can safely be */ - /* static since it's only called once, with the */ - /* allocation lock held. */ - - - GC_setup_temporary_fault_handler(); - if (setjmp(GC_jmp_buf) == 0) { - result = (ptr_t)(((word)(p)) - & ~(MIN_PAGE_SIZE-1)); - for (;;) { - if (up) { - result += MIN_PAGE_SIZE; - } else { - result -= MIN_PAGE_SIZE; - } - GC_noop1((word)(*result)); - } - } - GC_reset_fault_handler(); - if (!up) { + static VOLATILE ptr_t result; + /* Needs to be static, since otherwise it may not be */ + /* preserved across the longjmp. Can safely be */ + /* static since it's only called once, with the */ + /* allocation lock held. */ + + + GC_setup_temporary_fault_handler(); + if (setjmp(GC_jmp_buf) == 0) { + result = (ptr_t)(((word)(p)) + & ~(MIN_PAGE_SIZE-1)); + for (;;) { + if (up) { result += MIN_PAGE_SIZE; - } - return(result); -# else /* ECOS */ - abort(); -# endif /* ECOS */ + } else { + result -= MIN_PAGE_SIZE; + } + GC_noop1((word)(*result)); + } + } + GC_reset_fault_handler(); + if (!up) { + result += MIN_PAGE_SIZE; + } + return(result); } # endif -# ifndef ECOS +# if defined(ECOS) || defined(NOSYS) +ptr_t GC_get_stack_base() +{ + return STACKBOTTOM; +} + +#else #ifdef LINUX_STACKBOTTOM @@ -761,7 +760,7 @@ ptr_t GC_get_stack_base() #endif /* FREEBSD_STACKBOTTOM */ #if !defined(BEOS) && !defined(AMIGA) && !defined(MSWIN32) \ - && !defined(MSWINCE) && !defined(OS2) && !defined(ECOS) + && !defined(MSWINCE) && !defined(OS2) ptr_t GC_get_stack_base() { @@ -815,7 +814,7 @@ ptr_t GC_get_stack_base() return(result); # endif /* STACKBOTTOM */ } -# endif /* ECOS */ +# endif /* NOSYS ECOS */ # endif /* ! AMIGA, !OS 2, ! MS Windows, !BEOS */ -- cgit v1.2.3