[Vm-dev] VM Maker: Cog-eem.329.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Sep 6 10:08:29 UTC 2016


Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.329.mcz

==================== Summary ====================

Name: Cog-eem.329
Author: eem
Time: 6 September 2016, 12:08:13.352767 pm
UUID: d6e9861d-2c8f-4f97-b544-80637888b569
Ancestors: Cog-eem.328

Refactor disassembly to append labels associated wiuth the address immediately following the last instruction in a range (e.g. those following a ceNonLocalReturn call).

=============== Diff against Cog-eem.328 ===============

Item was changed:
  ----- Method: CogProcessorAlien>>disassembleFrom:to:in:for:labels:on: (in category 'disassembly') -----
  disassembleFrom: startAddress to: endAddress in: memory for: aSymbolManager "<Cogit>" labels: labelDictionary on: aStream
  	| address |
  	address := startAddress.
  	[address <= endAddress] whileTrue:
  		[[:sizeArg :stringArg| | size string |
  		  size := sizeArg.
  		  string := stringArg.
  		  (aSymbolManager labelForPC: address) ifNotNil:
  			[:label| aStream nextPutAll: label; nextPut: $:; cr].
  		  (labelDictionary at: address ifAbsent: []) ifNotNil:
  			[:label|
+ 			self printLabel: label on: aStream at: address for: aSymbolManager.
+ 			label isArray ifTrue:
+ 				[string := nil.
+ 				 size := label third]].
- 			label isArray
- 				ifTrue: [label first == #literal
- 							ifTrue:
- 								[aStream
- 									nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
- 									nextPut: $:; space;
- 									nextPutAll: (aSymbolManager lookupAddress: (aSymbolManager objectMemory longAt: address))]
- 							ifFalse:
- 								[aStream
- 									nextPutAll: label first;
- 									nextPut: $:; cr;
- 									nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
- 									nextPut: $:; space;
- 									nextPutAll: (aSymbolManager perform: label second with: address) asString].
- 						string := nil.
- 						size := label third]
- 				ifFalse: [aStream nextPutAll: label; nextPut: $:; cr]].
  		  string ifNotNil:
  			[aStream nextPutAll: (self decorateDisassembly: string for: aSymbolManager fromAddress: address)].
  		  aStream cr; flush.
  		  address := address + size]
  			valueWithArguments: (self
  									primitiveDisassembleAt: address
+ 									inMemory: memory)].
+ 	(labelDictionary at: address ifAbsent: []) ifNotNil:
+ 		[:label| self printLabel: label on: aStream at: address for: aSymbolManager]!
- 									inMemory: memory)]!

Item was added:
+ ----- Method: CogProcessorAlien>>printLabel:on:at:for: (in category 'printing') -----
+ printLabel: label on: aStream at: address for: aSymbolManager
+ 	"Print label on aStream.  The label is either a triple of {type, printer, size} or a simple string."
+ 	label isArray
+ 		ifTrue: [label first == #literal
+ 					ifTrue:
+ 						[aStream
+ 							nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
+ 							nextPut: $:; space;
+ 							nextPutAll: (aSymbolManager lookupAddress: (aSymbolManager objectMemory longAt: address))]
+ 					ifFalse:
+ 						[aStream
+ 							nextPutAll: label first;
+ 							nextPut: $:; cr;
+ 							nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
+ 							nextPut: $:; space;
+ 							nextPutAll: (aSymbolManager perform: label second with: address) asString]]
+ 		ifFalse: [aStream nextPutAll: label; nextPut: $:; cr]!

Item was changed:
  ----- Method: GdbARMAlien>>disassembleFrom:to:in:for:labels:on: (in category 'disassembly') -----
  disassembleFrom: startAddress to: endAddress in: memory for: aSymbolManager "<Cogit>" labels: labelDictionary on: aStream
  	| address |
  	address := startAddress.
  	[address <= endAddress] whileTrue:
  		[[:sizeArg :stringArg| | size string index offset |
  		size := sizeArg.
  		string := stringArg.
  		(aSymbolManager labelForPC: address) ifNotNil:
  			[:label| aStream nextPutAll: label; nextPut: $:; cr].
  		(labelDictionary at: address ifAbsent: []) ifNotNil:
  			[:label|
+ 			self printLabel: label on: aStream at: address for: aSymbolManager.
+ 			label isArray ifTrue:
+ 				[string := nil.
+ 				 size := label third]].
- 			label isArray
- 				ifTrue: [label first == #literal
- 							ifTrue:
- 								[label size = 4 ifTrue:
- 									[aStream nextPutAll: label last; nextPut: $:; cr].
- 								 aStream
- 									nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
- 									nextPut: $:; space;
- 									nextPutAll: ((aSymbolManager objectMemory longAt: address) printStringBase: 16 length: 8 padded: true) asLowercase.
- 								 (aSymbolManager lookupAddress: (aSymbolManager objectMemory longAt: address)) ifNotNil:
- 									[:name| aStream space; nextPutAll: name]]
- 							ifFalse:
- 								[aStream
- 									nextPutAll: label first;
- 									nextPut: $:; cr;
- 									nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
- 									nextPut: $:; space;
- 									nextPutAll: (aSymbolManager perform: label second with: address) asString].
- 						string := nil.
- 						size := label third]
- 				ifFalse: [aStream nextPutAll: label; nextPut: $:; cr]].
  		string ifNotNil:
  			[aStream nextPutAll: (self decorateDisassembly: string for: aSymbolManager fromAddress: address).
  			 (string includesSubString: ': ldr	') ifTrue:"i.e. colon space 'ldr' tab" 
  				[(index := string indexOfSubCollection: ' [pc, #' startingAt: 1) > 0
  					ifTrue:
  						[offset := Integer readFrom: (ReadStream on: string from: index + 7 to: (string indexOf: $] startingAt: index + 7) - 1)]
  					ifFalse:
  						[(string indexOfSubCollection: ' [pc]' startingAt: 1) > 0 ifTrue:
  							[offset := 0]].
  				 offset ifNotNil:
  					[offset := address + 8 + offset.
  					 labelDictionary
  						at: offset
  						ifPresent:
  							[:entry|
  							entry isString
  								ifTrue: [labelDictionary at: offset put: {#literal. offset. 4. entry}]
  								ifFalse: [self assert: (entry isArray and: [entry first == #literal])]]
  						ifAbsentPut: [{#literal. offset. 4}]]]].
  		aStream cr; flush.
  		address := address + size]
  			valueWithArguments: (self
  									primitiveDisassembleAt: address
+ 									inMemory: memory)].
+ 	(labelDictionary at: address ifAbsent: []) ifNotNil:
+ 		[:label| self printLabel: label on: aStream at: address for: aSymbolManager]!
- 									inMemory: memory)]!

Item was added:
+ ----- Method: GdbARMAlien>>printLabel:on:at:for: (in category 'printing') -----
+ printLabel: label on: aStream at: address for: aSymbolManager
+ 	"Print label on aStream.  The label is either a triple of {type, printer, size} or a simple string."
+ 	label isArray
+ 		ifTrue: [label first == #literal
+ 					ifTrue:
+ 						[label size = 4 ifTrue:
+ 							[aStream nextPutAll: label last; nextPut: $:; cr].
+ 						 aStream
+ 							nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
+ 							nextPut: $:; space;
+ 							nextPutAll: ((aSymbolManager objectMemory longAt: address) printStringBase: 16 length: 8 padded: true) asLowercase.
+ 						 (aSymbolManager lookupAddress: (aSymbolManager objectMemory longAt: address)) ifNotNil:
+ 							[:name| aStream space; nextPutAll: name]]
+ 					ifFalse:
+ 						[aStream
+ 							nextPutAll: label first;
+ 							nextPut: $:; cr;
+ 							nextPutAll: (address printStringBase: 16 length: 8 padded: true) asLowercase;
+ 							nextPut: $:; space;
+ 							nextPutAll: (aSymbolManager perform: label second with: address) asString]]
+ 		ifFalse: [aStream nextPutAll: label; nextPut: $:; cr]!



More information about the Vm-dev mailing list