From 4fd2baf278cc7d8d732d40a3c587bff02a3c1330 Mon Sep 17 00:00:00 2001 From: Raymond Toy Date: Sat, 1 Sep 2012 11:08:01 -0700 Subject: [PATCH] Split x86-validate into separate files. src/lisp/x86-validate.h: o Remove linux, darwin, and solaris parts src/lisp/x86-validate-linux.h: src/lisp/x86-validate-darwin.h: src/lisp/x86-validate-solaris.h: o New files for each os. --- src/lisp/x86-validate-darwin.h | 56 ++++++++++++++++++++++++++++++++++ src/lisp/x86-validate-linux.h | 64 +++++++++++++++++++++++++++++++++++++++ src/lisp/x86-validate-solaris.h | 60 ++++++++++++++++++++++++++++++++++++ src/lisp/x86-validate.h | 61 +++++++------------------------------ 4 files changed, 191 insertions(+), 50 deletions(-) create mode 100644 src/lisp/x86-validate-darwin.h create mode 100644 src/lisp/x86-validate-linux.h create mode 100644 src/lisp/x86-validate-solaris.h diff --git a/src/lisp/x86-validate-darwin.h b/src/lisp/x86-validate-darwin.h new file mode 100644 index 0000000..53166e8 --- /dev/null +++ b/src/lisp/x86-validate-darwin.h @@ -0,0 +1,56 @@ +/* + * + * This code was written as part of the CMU Common Lisp project at + * Carnegie Mellon University, and has been placed in the public domain. + * + */ + +#ifndef _X86_VALIDATE_DARWIN_H_ +#define _X86_VALIDATE_DARWIN_H_ + +/* + * Also look in compiler/x86/parms.lisp for some of the parameters. + */ + +#define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly) +#define READ_ONLY_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define STATIC_SPACE_START (SpaceStart_TargetStatic) +#define STATIC_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define BINDING_STACK_START (0x38000000) +#define BINDING_STACK_SIZE (0x07fff000) /* 128MB - 1 page */ + +#define CONTROL_STACK_START (0x40000000) + +/* + * According to /usr/include/sys/signal.h, MINSIGSTKSZ is 32K and + * SIGSTKSZ is 128K. We should account for that appropriately. + */ +#define CONTROL_STACK_SIZE (0x07fdf000) /* 128MB - SIGSTKSZ - 1 page */ + +#define SIGNAL_STACK_START (0x47fe0000) /* One page past the end of the control stack */ +#define SIGNAL_STACK_SIZE SIGSTKSZ + +#define DYNAMIC_0_SPACE_START (SpaceStart_TargetDynamic) +#ifdef GENCGC + +/* + * On Darwin, /usr/lib/dyld appears to always be loaded at address + * #x8fe2e000. Hence, the maximum dynamic space size is 1206050816 + * bytes, or just over 1.150 GB. Set the limit to 1.150 GB. + */ +#define DYNAMIC_SPACE_SIZE (0x47E00000U) /* 1.150GB */ + +#else +#define DYNAMIC_SPACE_SIZE (0x04000000U) /* 64MB */ +#endif + +#define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000U) /* 512MB */ + +#ifdef LINKAGE_TABLE +#define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart) +#define FOREIGN_LINKAGE_SPACE_SIZE (0x100000) /* 1MB */ +#endif + +#endif /*_X86_VALIDATE_DARWIN_H_*/ diff --git a/src/lisp/x86-validate-linux.h b/src/lisp/x86-validate-linux.h new file mode 100644 index 0000000..4a0e46c --- /dev/null +++ b/src/lisp/x86-validate-linux.h @@ -0,0 +1,64 @@ +/* + * + * This code was written as part of the CMU Common Lisp project at + * Carnegie Mellon University, and has been placed in the public domain. + * + */ + +#ifndef _X86_VALIDATE_LINUX_H_ +#define _X86_VALIDATE_LINUX_H_ + +/* + * Also look in compiler/x86/parms.lisp for some of the parameters. + * + * Address map: + * + * Linux: + * 0x00000000->0x08000000 128M Unused. + * 0x08000000->0x10000000 128M C program and memory allocation. + * 0x10000000->0x20000000 256M Read-Only Space. + * 0x20000000->0x28000000 128M Binding stack growing up. + * 0x28000000->0x38000000 256M Static Space. + * 0x38000000->0x40000000 128M Control stack growing down. + * 0x40000000->0x48000000 128M Reserved for shared libraries. + * 0x58000000->0x58100000 16M Foreign Linkage Table + * 0x58100000->0xBE000000 1631M Dynamic Space. + * 0xBFFF0000->0xC0000000 Unknown Linux mapping + * + * (Note: 0x58000000 allows us to run on a Linux system on an AMD + * x86-64. Hence we have a gap of unused memory starting at + * 0x48000000.) + */ + +#define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly) +#define READ_ONLY_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define STATIC_SPACE_START (SpaceStart_TargetStatic) +#define STATIC_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define BINDING_STACK_START (0x20000000) +#define BINDING_STACK_SIZE (0x07fff000) /* 128MB - 1 page */ + +#define CONTROL_STACK_START 0x38000000 +#define CONTROL_STACK_SIZE (0x07fff000 - 8192) + +#define SIGNAL_STACK_START CONTROL_STACK_END +#define SIGNAL_STACK_SIZE SIGSTKSZ + +#define DYNAMIC_0_SPACE_START (SpaceStart_TargetDynamic) + +#ifdef GENCGC +#define DYNAMIC_SPACE_SIZE (0x66000000) /* 1.632GB */ +#else +#define DYNAMIC_SPACE_SIZE (0x04000000) /* 64MB */ +#endif + +#define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000) /* 512MB */ + +#ifdef LINKAGE_TABLE +#define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart) +#define FOREIGN_LINKAGE_SPACE_SIZE (0x100000) /* 1MB */ +#endif + +#endif + diff --git a/src/lisp/x86-validate-solaris.h b/src/lisp/x86-validate-solaris.h new file mode 100644 index 0000000..32e3a2f --- /dev/null +++ b/src/lisp/x86-validate-solaris.h @@ -0,0 +1,60 @@ +/* + * + * This code was written as part of the CMU Common Lisp project at + * Carnegie Mellon University, and has been placed in the public domain. + * + */ + +#ifndef _X86_VALIDATE_SOLARIS_H_ +#define _X86_VALIDATE_SOLARIS_H_ + +/* + * Also look in compiler/x86/parms.lisp for some of the parameters. + * + * The memory map for Solaris/x86 looks roughly like + * + * 0x08045000->0x08050000 C stack? + * 0x08050000-> Code + C heap + * 0x10000000->0x20000000 256 MB read-only space + * 0x20000000->0x28000000 128M Binding stack growing up. + * 0x28000000->0x30000000 256M Static Space. + * 0x30000000->0x31000000 16M Foreign linkage table + * 0x38000000->0x40000000 128M Control stack growing down. + * 0x40000000->0xD0000000 2304M Dynamic Space. + * + * Starting at 0xd0ce0000 there is some mapped anon memory. libc + * seems to start at 0xd0d40000 and other places. Looks like memory + * above 0xd0ffe000 or so is not mapped. + */ + +#define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly) +#define READ_ONLY_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define STATIC_SPACE_START (SpaceStart_TargetStatic) +#define STATIC_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ + +#define BINDING_STACK_START (0x20000000) +#define BINDING_STACK_SIZE (0x07fff000) /* 128MB - 1 page */ + +#define CONTROL_STACK_START 0x38000000 +#define CONTROL_STACK_SIZE (0x07fff000 - 8192) +#define SIGNAL_STACK_START CONTROL_STACK_END +#define SIGNAL_STACK_SIZE SIGSTKSZ + +#define DYNAMIC_0_SPACE_START (SpaceStart_TargetDynamic) + +#ifdef GENCGC +#define DYNAMIC_SPACE_SIZE (0x90000000) /* 2.304GB */ +#else +#define DYNAMIC_SPACE_SIZE (0x04000000) /* 64MB */ +#endif + +#define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000) /* 512MB */ + +#ifdef LINKAGE_TABLE +#define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart) +#define FOREIGN_LINKAGE_SPACE_SIZE (0x100000) /* 1MB */ +#endif + +#endif + diff --git a/src/lisp/x86-validate.h b/src/lisp/x86-validate.h index 5580401..8db3bcb 100644 --- a/src/lisp/x86-validate.h +++ b/src/lisp/x86-validate.h @@ -8,6 +8,14 @@ #ifndef _X86_VALIDATE_H_ #define _X86_VALIDATE_H_ +#if defined(__linux__) +#include "x86-validate-linux.h" +#endif + +#if defined(DARWIN) +#include "x86-validate-darwin.h" +#endif + /* * Also look in compiler/x86/parms.lisp for some of the parameters. * @@ -119,7 +127,7 @@ #define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000) /* 512MB */ #endif -#if defined(__NetBSD__) || defined(DARWIN) +#if defined(__NetBSD__) #define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly) #define READ_ONLY_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ @@ -130,73 +138,26 @@ #define BINDING_STACK_SIZE (0x07fff000) /* 128MB - 1 page */ #define CONTROL_STACK_START (0x40000000) -#if defined(DARWIN) -/* - * According to /usr/include/sys/signal.h, MINSIGSTKSZ is 32K and - * SIGSTKSZ is 128K. We should account for that appropriately. - */ -#define CONTROL_STACK_SIZE (0x07fdf000) /* 128MB - SIGSTKSZ - 1 page */ -#define SIGNAL_STACK_START (0x47fe0000) /* One page past the end of the control stack */ -#define SIGNAL_STACK_SIZE SIGSTKSZ -#else #define CONTROL_STACK_SIZE (0x07fd8000) /* 128MB - SIGSTKSZ */ #define SIGNAL_STACK_START (0x47fd8000) #define SIGNAL_STACK_SIZE SIGSTKSZ -#endif #define DYNAMIC_0_SPACE_START (SpaceStart_TargetDynamic) #ifdef GENCGC -#if defined(DARWIN) -/* - * On Darwin, /usr/lib/dyld appears to always be loaded at address - * #x8fe2e000. Hence, the maximum dynamic space size is 1206050816 - * bytes, or just over 1.150 GB. Set the limit to 1.150 GB. - */ -#define DYNAMIC_SPACE_SIZE (0x47E00000U) /* 1.150GB */ -#else #define DYNAMIC_SPACE_SIZE (0x67800000U) /* 1.656GB */ -#endif #else #define DYNAMIC_SPACE_SIZE (0x04000000U) /* 64MB */ #endif + #define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000U) /* 512MB */ #ifdef LINKAGE_TABLE #define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart) #define FOREIGN_LINKAGE_SPACE_SIZE (0x100000) /* 1MB */ #endif -#endif /* __NetBSD__ || DARWIN */ - -#ifdef __linux__ -#define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly) -#define READ_ONLY_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ - -#define STATIC_SPACE_START (SpaceStart_TargetStatic) -#define STATIC_SPACE_SIZE (0x0ffff000) /* 256MB - 1 page */ - -#define BINDING_STACK_START (0x20000000) -#define BINDING_STACK_SIZE (0x07fff000) /* 128MB - 1 page */ - -#define CONTROL_STACK_START 0x38000000 -#define CONTROL_STACK_SIZE (0x07fff000 - 8192) - -#define SIGNAL_STACK_START CONTROL_STACK_END -#define SIGNAL_STACK_SIZE SIGSTKSZ - -#define DYNAMIC_0_SPACE_START (SpaceStart_TargetDynamic) -#ifdef GENCGC -#define DYNAMIC_SPACE_SIZE (0x66000000) /* 1.632GB */ -#else -#define DYNAMIC_SPACE_SIZE (0x04000000) /* 64MB */ -#endif -#define DEFAULT_DYNAMIC_SPACE_SIZE (0x20000000) /* 512MB */ -#ifdef LINKAGE_TABLE -#define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart) -#define FOREIGN_LINKAGE_SPACE_SIZE (0x100000) /* 1MB */ -#endif -#endif +#endif /* __NetBSD__ || DARWIN */ #ifdef SOLARIS /* -- 1.7.10.4