[Vm-dev] VM Maker: VMMaker.oscog-eem.297.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Jun 10 20:59:14 UTC 2013


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

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

Name: VMMaker.oscog-eem.297
Author: eem
Time: 10 June 2013, 1:57:07.909 pm
UUID: cb5c5783-9e64-4e06-ac22-1303b40171e9
Ancestors: VMMaker.oscog-eem.296

Fix 3 (!!) bugs in primitiveDLSymInLibrary

=============== Diff against VMMaker.oscog-eem.296 ===============

Item was changed:
  ----- Method: VMProfileLinuxSupportPlugin>>primitiveDLSymInLibrary (in category 'primitives') -----
  primitiveDLSymInLibrary
  	"Answer the address of the symbol whose name is the first argument
  	 in the library whose name is the second argument, or nil if none."
  	| nameObj symName libName lib sz addr ok |
  	<export: true>
  	<var: #symName type: #'char *'>
  	<var: #libName type: #'char *'>
  	<var: #lib type: #'void *'>
  	<var: #addr type: #'void *'>
  	nameObj := interpreterProxy stackValue: 0.
  	(interpreterProxy isBytes: nameObj) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	sz := interpreterProxy byteSizeOf: nameObj.
  	libName := self malloc: sz+1.
  	self st: libName rn: (interpreterProxy firstIndexableField: nameObj) cpy: sz.
+ 	libName at: sz put: 0.
  	nameObj := interpreterProxy stackValue: 1.
  	(interpreterProxy isBytes: nameObj) ifFalse:
  		[self free: libName.
  		 ^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	sz := interpreterProxy byteSizeOf: nameObj.
  	symName := self malloc: sz+1.
  	self st: symName rn: (interpreterProxy firstIndexableField: nameObj) cpy: sz.
+ 	symName at: sz put: 0.
+ 	lib := self dl: libName open: (#'RTLD_LAZY' bitOr: #'RTLD_NODELETE').
- 	lib := self dl: libName open: #'RTLD_LAZY' | #'RTLD_NODELETE'.
  	lib ifNil:
  		[self free: libName; free: symName.
  		 ^interpreterProxy primitiveFailFor: PrimErrInappropriate].
  	self dlerror. "clear dlerror"
  	addr := self dl: lib sym: symName.
  	ok := self dlerror isNil.
  	self free: symName.
  	self free: libName.
  	self dlclose: lib.
  	ok ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrNotFound].
+ 	^interpreterProxy methodReturnValue: (interpreterProxy positive32BitIntegerFor: addr asUnsignedLong)!
- 	^interpreterProxy methodReturnValue: (interpreterProxy positiveMachineIntegerValueOf: addr asUnsignedLong)!



More information about the Vm-dev mailing list