[Vm-dev] [Fwd: Image file loading]
Andreas Raab
andreas.raab at gmx.de
Sat Jan 23 10:10:09 UTC 2010
Igor Stasenko wrote:
> Let me restate my proposal,
> because during private talk with John, we figured out that there is
> some misunderstanding.
>
> Platform or 'support' code is C code written by platform maintainer.
> Interpreter code is generated by VMMaker , and written by us :)
>
> What i proposing:
Makes absolutely no sense. You've now duplicated
Interpreter>>readImageFromFile:heapSize:startingAt:. Without addressing
*any* of the issues that started this whole discussion.
- A.
>
> Interpreter provides a single API function:
>
> Interpreter>>readImageFrom: handle,
>
> where handle is just a (void*) pointer, which only
> role is to serve as an argument , which interpreter should use to
> identify this resource, when
> calling a service functions, provided by platform code.
>
> In our specific case, the only service function, which we need is to
> ask platform code to read a next N bytes from
> given resource and store result at specified location:
>
> Platform>>readFrom: object into: memoryLocation size: bytesToRead
>
> here, the memoryLocation is a pointer to buffer, which Interpreter can
> obtain by allocating the memory
> or just a temporary buffer on stack.
>
> Now, it should be more clear, what Interpreter>>readImageFrom: handle, does:
>
> Interpreter>>readImageFrom: handle
> | header |
> self var: 'header' declareC: 'char[64]'.
>
> "first, read first 64 bytes - an image header'
> (Platform readFrom: handle into: header size: 64) ~~ 64 ifTrue: [ ^ nil ].
>
> "parse the header, and check if it is valid etc"
> ((self badHeaderIn: header ) ifTrue: [ ^ nil ]. "Fail sooner"
>
> memsize := header longAt: xxx.
> (self isNotEnoughMemoryFor: memsize ) ifTrue: [ ^ nil ].
> ....
>
> "now, we're ready to allocate the memory for image"
> memory := Platform allocate: memsize + self breathingRoom.
>
> "now read the image into allocated area"
> Platform readFrom: handle into: memory size: memsize.
>
> ----------------
> Since allocation and reading is both controlled by platform code,
> one could do any tricks with it, like reserve an address space, but
> not commit it into physical memory,
> but instead lazily read only pages which is not yet in memory using a
> page-fault mechanism etc.
>
>
More information about the Vm-dev
mailing list