[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