[Git][cmucl/cmucl][master] 4 commits: Fix #40: Move start of heap space higher
Raymond Toy
rtoy at common-lisp.net
Tue Aug 29 18:31:21 UTC 2017
Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
c40b7a6b by Raymond Toy at 2017-08-29T10:38:13-07:00
Fix #40: Move start of heap space higher
This is a workaround for issue #40. By moving the start of the heap
to a higher address, we can still run on older systems (albeit with
reduced max heap size), and run on newer systesm where the C code is
now mapped at or overlapping the (old) heap start. Arbitrarily choose
0x60000000 as a compromise.
This also requires moving the foreign linkage start to a different
address because the old address overlaps the new C area.
Ideally, we could fix this if we could map the heap wherever the OS
wants to put it, but we're not there yet.
Use boot-2017-04.lisp to bootstrap this change from the 2017-04
snapshot.
- - - - -
48f8ebb9 by Raymond Toy at 2017-08-29T10:54:21-07:00
Add handler-bind to auto restart
Changing defconstant's signal an error. Add a handler-bind to restart
and continue with the changed values.
- - - - -
aba0bc5c by Raymond Toy at 2017-08-29T10:56:15-07:00
Rename to boot-2017-04-1.lisp
- - - - -
dbf7c0af by Raymond Toy at 2017-08-29T18:31:19+00:00
Merge branch 'rtoy-fix-40-map-heap-higher' into 'master'
Fix #40: Move start of heap space higher
Closes #40
See merge request !21
- - - - -
3 changed files:
- + src/bootfiles/21b/boot-2017-04-1.lisp
- src/compiler/x86/parms.lisp
- src/lisp/x86-validate-linux.h
Changes:
=====================================
src/bootfiles/21b/boot-2017-04-1.lisp
=====================================
--- /dev/null
+++ b/src/bootfiles/21b/boot-2017-04-1.lisp
@@ -0,0 +1,28 @@
+;; Bootstrap file for linuu to move the heap to a higher address so
+;; that executables will work on newer OSes, as mentioned in issue
+;; #40.
+;;
+;; Use "bin/build.sh -B boot-2017-04" to build this.
+;;
+;; Also need to move the foreign linkage start to a different address
+;; because this also overlaps where the C code is placed in an
+;; executable image.
+;;
+;; This reduces the max total heap space on older systems, but it
+;; looks like newer systems have the C libraries and stack mapped at a
+;; much higher address.
+
+#+linux
+(setf (c::backend-foreign-linkage-space-start c::*target-backend*)
+ #x5f000000)
+
+#+linux
+(handler-bind
+ ((error (lambda (c)
+ (declare (ignore c))
+ (invoke-restart 'continue))))
+ (defconstant vm::target-foreign-linkage-space-start
+ (c:backend-foreign-linkage-space-start c::*target-backend*))
+
+ (defconstant vm::target-dynamic-space-start
+ #x60000000))
=====================================
src/compiler/x86/parms.lisp
=====================================
--- a/src/compiler/x86/parms.lisp
+++ b/src/compiler/x86/parms.lisp
@@ -64,7 +64,7 @@
(setf (backend-page-size *target-backend*) 4096)
(setf (c::backend-foreign-linkage-space-start *target-backend*)
- #+linux #x58000000
+ #+linux #x5f000000
#+solaris #x30000000
#-(or linux solaris) #xB0000000
(c::backend-foreign-linkage-entry-size *target-backend*)
@@ -235,7 +235,7 @@
#+FreeBSD #x28F00000
#-FreeBSD #x28000000)
(defconstant target-dynamic-space-start
- #+linux #x58100000
+ #+linux #x60000000
#+solaris #x40000000
#-(or linux solaris) #x48000000)
(defconstant target-foreign-linkage-space-start
=====================================
src/lisp/x86-validate-linux.h
=====================================
--- a/src/lisp/x86-validate-linux.h
+++ b/src/lisp/x86-validate-linux.h
@@ -37,6 +37,24 @@
* However, Fedora 22 ther appears to be nothing mapped there. In
* fact it appears to be free all the way to 0xf7c1b000. That would
* allow a heap of size 2555 MB.
+ *
+ * On even newer OSes like Ubuntu 17.04, the map looks something like
+ *
+ * 0x00000000->0x10000000 128M ?
+ * 0x10000000->0x20000000 256M Read-Only Space.
+ * 0x20000000->0x28000000 128M Binding stack growing up.
+ * 0x28000000->0x38000000 256M Static Space.
+ * 0x38000000-> ?
+ * 0x56555000-> C space
+ * 0xf7dfe000-> [anon]
+ * 0xf7e00000->0xf7fb4000 libc.so
+ * 0xf7fb5000->0xf7fd9000 [anon]
+ * 0xf7fd9000->0xf7ffd000 ld.so
+ * 0xfffdd000-> [stack]
+ *
+ * There's a potential clash if the lisp heap is mapped near
+ * 0x58100000 as shown above. This happens if a lisp exectuable image
+ * is created.
*/
#define READ_ONLY_SPACE_START (SpaceStart_TargetReadOnly)
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/compare/2830e140d5c70d34cfbe32ad18023de6db014926...dbf7c0af2ca148b91d3469b4a76da27b1c1ad8f6
---
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/compare/2830e140d5c70d34cfbe32ad18023de6db014926...dbf7c0af2ca148b91d3469b4a76da27b1c1ad8f6
You're receiving this email because of your account on gitlab.common-lisp.net.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20170829/77159b20/attachment-0001.html>
More information about the cmucl-cvs
mailing list