[Vm-dev] Alien initialization
Tobias Pape
Das.Linux at gmx.de
Fri Feb 23 23:12:14 UTC 2018
Hi Eliot
> On 23.02.2018, at 23:36, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>
> Hi Tobias,
>
> done.
thankyouverymuch
> I've made it match Alien class>>ensureInSpecialObjectsArray and so it only looks in VMObjectIndices. But this should be OK right?
I think so.
I just wanted to install a current VMMaker and it bailed all the way.
So I decided that I have no clue what's going on and proposed a fix that only added and did not remove a thing.
Best regards
-Tobias
>
> On Fri, Feb 23, 2018 at 11:45 AM, Tobias Pape <Das.Linux at gmx.de> wrote:
>
> Hi,
>
> can someone with commit rights on Alien please change the following method?
>
>
> UnsafeAlien class>>ensureInSpecialObjectsArray
> "UnsafeAlien must be in the specialObjectsArray to enable the Newsqueak FFI.
> Because of the bootstrap the specialObjectsArray may already have been
> partially initialized with the callback selector and to be large enough (as part of
> loading immutability), but it will be missing UnsafeAlien until UnsafeAlien is loaded.
> So check if the specialObjectsArray is of the expected size before recreating
> and slam UnsafeAlien in if the specialObjectsArray is already large enough."
>
> | index |
> self ~~ UnsafeAlien ifTrue: [^self].
>
> index := 55.
> (((Smalltalk includesKey: #VMObjectIndices)
> and: [((Smalltalk at: #VMObjectIndices) classPool at: #ClassUnsafeAlien ifAbsent: []) == (index - 1)])
> or: [
> ((Smalltalk includesKey: #ObjectMemory)
> and: [((Smalltalk at: #ObjectMemory) classPool at: #ClassUnsafeAlien ifAbsent: []) == (index - 1)])])
> ifFalse:
> [self error: 'index probably wrong'].
>
> Smalltalk specialObjectsArray size < index ifTrue:
> [Smalltalk recreateSpecialObjectsArray].
>
> (Smalltalk specialObjectsArray size < index
> or: [(Smalltalk specialObjectsArray at: index) ~~ nil
> and: [(Smalltalk specialObjectsArray at: index) ~~ self]]) ifTrue:
> [self error: 'SystemDictionary>>recreateSpecialObjectsArray appears incompatible'].
>
> (Smalltalk specialObjectsArray at: index) == nil ifTrue:
> [Smalltalk specialObjectsArray at: index put: self]
>
>
> This is necessary as in the current spur architecture the #Class.... class variables are no longer in ObjectMemory but in a Shared Pool.
>
> Hence, it breaks on loading.
>
>
> Best regards
> -Tobias
>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
More information about the Vm-dev
mailing list