Leon Matthes uploaded a new version of CogTools to project VM Maker: http://source.squeak.org/VMMaker/CogTools-LM.94.mcz
==================== Summary ====================
Name: CogTools-LM.94 Author: LM Time: 23 November 2023, 5:13:14.611051 pm UUID: bf8819e7-2069-49db-a7d9-593bfad324c2 Ancestors: CogTools-eem.93
Filter Linux symbols on an image level, not in the primitive.
Follow-up for VMMaker.threaded-LM.3348
This ensures that even if the primitive leaves an entry of the Array empty, the Manager just filters it out.
=============== Diff against CogTools-eem.93 ===============
Item was changed: ----- Method: VMProfilerLinuxSymbolsManager>>initializeMost (in category 'initialize-release') ----- initializeMost | shortNames | initialized := false. maxAddressMask := (2 raisedToInteger: 32) - 1. modulesByName := Dictionary new. symbolsByModule := Dictionary new. shortNames := Set new. tempDir := self class tempDirectory. CompatibilityClass ensureExistenceOfDirectory: tempDir. modules := self primitiveExecutableModules. modules := (1 to: modules size by: 2) collect: [:i| | fileName shortName counter longName | fileName := modules at: i. + "The linux-gate.so.1 library may result in an empty entry." + fileName ifNotNil: [ + (fileName beginsWith: '/dgagent') ifTrue: + [fileName := fileName allButFirst: 8]. + shortName := CompatibilityClass nameOfFile: fileName in: tempDir. + counter := 0. + [shortNames includes: shortName] whileTrue: + [counter := counter + 1. + shortName := (CompatibilityClass nameOfFile: fileName in: tempDir), counter printString]. + shortNames add: shortName. + longName := (modules at: i + 1) + ifNil: [fileName] + ifNotNil: + [:symlink| + symlink first = $/ + ifTrue: [symlink] + ifFalse: [( CompatibilityClass parentPathOfFile: fileName ), '/', symlink]]. + "some files are off limits (e.g. /dgagent/lib/preload.so)" + (CompatibilityClass exists: longName) ifTrue: + [(modulesByName + at: longName + put: VMPExecutableModuleSymbol new) + name: longName; + shortName: shortName]]]. - (fileName beginsWith: '/dgagent') ifTrue: - [fileName := fileName allButFirst: 8]. - shortName := CompatibilityClass nameOfFile: fileName in: tempDir. - counter := 0. - [shortNames includes: shortName] whileTrue: - [counter := counter + 1. - shortName := (CompatibilityClass nameOfFile: fileName in: tempDir), counter printString]. - shortNames add: shortName. - longName := (modules at: i + 1) - ifNil: [fileName] - ifNotNil: - [:symlink| - symlink first = $/ - ifTrue: [symlink] - ifFalse: [( CompatibilityClass parentPathOfFile: fileName ), '/', symlink]]. - "some files are off limits (e.g. /dgagent/lib/preload.so)" - (CompatibilityClass exists: longName) ifTrue: - [(modulesByName - at: longName - put: VMPExecutableModuleSymbol new) - name: longName; - shortName: shortName]]. "The primitive always answers the VM info in the first entry." vmModule := modules first. "now filter out the files we can't read..." modules := modules select: [:m| m notNil and: [modulesByName includesKey: m name]]!
vm-dev@lists.squeakfoundation.org