author | Camm Maguire <camm@transcendence.maguirefamily.org> | 2025年05月08日 12:37:02 -0400 |
---|---|---|
committer | Camm Maguire <camm@transcendence.maguirefamily.org> | 2025年05月08日 12:37:02 -0400 |
commit | 5907bbbe67433e39ec57e36346e3ec30b769b14d (patch) | |
tree | f112e9be72262af1aedad063fc215bb4daa0b113 | |
parent | fd8984c0fcdaa45ff4296ebfdf13eddd12c2362b (diff) | |
download | gcl-5907bbbe67433e39ec57e36346e3ec30b769b14d.tar.gz |
-rw-r--r-- | gcl/h/cstack.h | 27 | ||||
-rw-r--r-- | gcl/o/main.c | 27 |
diff --git a/gcl/h/cstack.h b/gcl/h/cstack.h index b833a2652..aa5a08e6c 100644 --- a/gcl/h/cstack.h +++ b/gcl/h/cstack.h @@ -16,40 +16,31 @@ #define SET_STACK_POINTER "mov %0,r15\n\t" #endif -#define FIXED_STACK (1UL<<23)/*FIXME configure?*/ -#if defined(__SH4__)/*FIXME is this just due to qemu?*/ -#define CTOP (void *)0x80000000 -#define SS FIXED_STACK +#define CTOP (void *)0xc0000000/*FIXME configure?*/ +#define MIN_STACK (1UL<<23)/*QEMU will not grow the stack*/ + +#if defined(__SH4__) +#undef CTOP +#define CTOP (void *)0x80000000/*FIXME is this just due to qemu?*/ #elif defined(__gnu_hurd__) -#define CTOP (void *)0xc0000000 -#define SS FIXED_STACK #define MAP_GROWSDOWN 0 #define MAP_STACK 0 -#else -#define CTOP (void *)0xc0000000/*FIXME configure?*/ -#define SS getpagesize() #endif #ifdef SET_STACK_POINTER { - void *p,*p1,*b,*s; + void *p,*p1,*b=CTOP-MIN_STACK,*s; int a,f=MAP_FIXED|MAP_PRIVATE|MAP_ANON|MAP_STACK; - int ss= -#ifdef CHECK_FOR_QEMU - qemu_p() ? FIXED_STACK : -#endif - SS; p=alloca(1); p1=alloca(1); - b=CTOP-(p1<p ? ss : FIXED_STACK); a=p1<p ? p-p1 : p1-p; - a<<=2; + a<<=3; s=p1<p ? CTOP-a : b+a; if (p1<p) f|=MAP_GROWSDOWN; if (p > CTOP || p < b) { - if (mmap(b,ss,PROT_READ|PROT_WRITE|PROT_EXEC,f,-1,0)!=(void *)-1) { + if (mmap(b,MIN_STACK,PROT_READ|PROT_WRITE|PROT_EXEC,f,-1,0)!=(void *)-1) { stack_map_base=b; asm volatile (SET_STACK_POINTER::"r" (s):"memory"); if (p1>p) diff --git a/gcl/o/main.c b/gcl/o/main.c index 79fd138a3..64eb3cd91 100644 --- a/gcl/o/main.c +++ b/gcl/o/main.c @@ -407,32 +407,6 @@ setup_maxpages(double scale) { } -int -qemu_p(void) { - -#if !defined(DARWIN) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__)/*FIXME*/ - - char *c; - ufixnum e,r=0; - int l; - - massert((l=open("/proc/cpuinfo",O_RDONLY))!=-1); - - for (e=0;!e && (c=next_line(l,&r));) - e=!memcmp("model",c,5) && strstr(c,"QEMU"); - - massert(!close(l)); - - return e; - -#else - - return 0; - -#endif -} - - static void * next_shared_lib_map_no_malloc(void) { @@ -753,7 +727,6 @@ main(int argc, char **argv, char **envp) { bds_top = bds_org-1; frs_top = frs_org-1; -#define CHECK_FOR_QEMU #include "cstack.h" gcl_init_alloc(alloca(1)); |