[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