[Vm-dev] VM Maker: Cog-eem.335.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jan 10 21:05:50 UTC 2017
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.335.mcz
==================== Summary ====================
Name: Cog-eem.335
Author: eem
Time: 10 January 2017, 1:05:39.016065 pm
UUID: b001d418-6353-4851-8ea9-cb6184e13b54
Ancestors: Cog-nice.334
Extend Spur32BitPreen to allow resetting header values to their defaults, and to not raise an error if there is no changes file (for the Pharo bootstrap).
=============== Diff against Cog-nice.334 ===============
Item was changed:
SimulatorHarness subclass: #Spur32BitPreen
+ instanceVariableNames: 'oldHeap newHeap map reverseMap oldInterpreter newInterpreter imageHeaderFlags savedWindowSize writeDefaultHeader'
- instanceVariableNames: 'oldHeap newHeap map reverseMap oldInterpreter newInterpreter imageHeaderFlags savedWindowSize'
classVariableNames: ''
poolDictionaries: 'VMObjectIndices'
category: 'Cog-Bootstrapping'!
!Spur32BitPreen commentStamp: 'eem 8/15/2016 19:49' prior: 0!
A Spur32BitPreen is a simple image rewriter for 32-bit Spru images that eliminates free space and hence shrinks the preened image. Use via
Spur32BitPreen new preenImage: 'spur'
which will produce spur-preen.image and spur-preen.changes from spur.image and spur.changes.
Instance Variables
imageHeaderFlags: <Integer>
map: <Dictionary>
newHeap: <Spur32BitMMLESimulator>
newInterpreter: <StackInterpreterSimulatorLSB>
oldHeap: <Spur32BitMMLESimulator>
oldInterpreter: <StackInterpreterSimulatorLSB>
reverseMap: <Dictionary>
savedWindowSize: <Integer>
imageHeaderFlags
- flags word in image header
map
- map from oops in old image to oops in new image
newHeap
- the preened heap
newInterpreter
- the interpreter wrapping the preened heap
oldHeap
- the heap to be preened
oldInterpreter
- the interpreter wrapping the heap to be preened
reverseMap
- map from oops in new image to oops in old image
savedWindowSize
- screen size word in mage header
!
Item was changed:
----- Method: Spur32BitPreen>>on: (in category 'public access') -----
on: imageName
(oldInterpreter := StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager))
openOn: imageName extraMemory: 0.
oldHeap := oldInterpreter objectMemory.
imageHeaderFlags := oldInterpreter getImageHeaderFlags.
+ savedWindowSize ifNil: [savedWindowSize := oldInterpreter savedWindowSize].
- savedWindowSize := oldInterpreter savedWindowSize.
newInterpreter := StackInterpreterSimulator newWithOptions: #(ObjectMemory Spur32BitMemoryManager).
newHeap := newInterpreter objectMemory.
newHeap
allocateMemoryOfSize: oldHeap oldSpaceSize
newSpaceSize: 8 * 1024 * 1024
stackSize: 16 * 1024
codeSize: 0.
newHeap bootstrapping: true.
self initMaps!
Item was changed:
----- Method: Spur32BitPreen>>preenImageUsingFileDirectory: (in category 'public access') -----
preenImageUsingFileDirectory: imageName
| dirName baseName dir |
dirName := FileDirectory dirPathFor: imageName.
baseName := (imageName endsWith: '.image')
ifTrue: [FileDirectory baseNameFor: imageName]
ifFalse: [FileDirectory localNameFor: imageName].
dir := dirName isEmpty ifTrue: [FileDirectory default] ifFalse: [FileDirectory default on: dirName].
self on: (dir fullNameFor: baseName, '.image').
[self preenImage]
on: Halt
do: [:ex|
"suppress halts from the usual suspects (development time halts)"
(#(fullGC compactImage) includes: ex signalerContext sender selector)
ifTrue: [ex resume]
ifFalse: [ex pass]].
self writeSnapshot: (dir fullNameFor: baseName, '-preen.image')
headerFlags: imageHeaderFlags
screenSize: savedWindowSize.
+ (dir fileExists: baseName, '.changes')
+ ifTrue:
+ [dir deleteFileNamed: baseName, '-preen.changes';
+ copyFileNamed: baseName, '.changes' toFileNamed: baseName, '-preen.changes']
+ ifFalse:
+ [Transcript cr; show: 'could not find ', baseName, '.changes']!
- dir deleteFileNamed: baseName, '-preen.changes';
- copyFileNamed: baseName, '.changes' toFileNamed: baseName, '-preen.changes'!
Item was added:
+ ----- Method: Spur32BitPreen>>savedWindowSize: (in category 'public access') -----
+ savedWindowSize: aPointOrInteger
+ savedWindowSize := aPointOrInteger isInteger
+ ifTrue: [aPointOrInteger]
+ ifFalse: [(aPointOrInteger x min: 65535) << 16 + (aPointOrInteger y min: 65535)]!
Item was added:
+ ----- Method: Spur32BitPreen>>writeDefaultHeader: (in category 'public access') -----
+ writeDefaultHeader: aBoolean
+ writeDefaultHeader := aBoolean!
Item was changed:
----- Method: Spur32BitPreen>>writeSnapshot:headerFlags:screenSize: (in category 'snapshot') -----
writeSnapshot: imageFileName headerFlags: headerFlags screenSize: screenSizeInteger
newHeap
checkFreeSpace;
runLeakCheckerForFullGC.
+ writeDefaultHeader == true ifTrue:
+ [newInterpreter
+ desiredEdenBytes: 0;
+ desiredNumStackPages: 0;
+ setDesiredCogCodeSize: 0;
+ setMaxExtSemSizeTo: 0].
newInterpreter
setImageHeaderFlagsFrom: headerFlags;
setDisplayForm: nil;
setSavedWindowSize: savedWindowSize;
imageName: imageFileName;
writeImageFileIO.
Transcript cr; show: 'Done!!'!
More information about the Vm-dev
mailing list