[Haskell-cafe] [Help] Trying to rewrite the NetBSD kernel usingHaskell language.
Donn Cave
donn at avvanta.com
Mon Jan 20 16:27:55 UTC 2014
quoth Kiwamu Okabe>,
...
> static int
> auich_open(void *addr, int flags)
> {
> struct auich_softc *sc;
>
> sc = (struct auich_softc *)addr;
> mutex_spin_exit(&sc->sc_intr_lock);
> sc->codec_if->vtbl->lock(sc->codec_if);
> ~~~
>
> Note the line "sc->codec_if->vtbl->lock(sc->codec_if);".
> It traces pointer tree regionally.
> Haskell's Strorable class is not good for the use case,
> because it copies the entire pointer tree!
That suggests to me that you should change the class, so that
its Storable instance doesn't need to dereference the pointers -
that is, vtbl for example would be a Ptr type. Though that would
not save you very much trouble in the present case.
Are you using hsc2hs? Your example has a few things like "plusPtr
p offsetOf_Ac97CodecIf_vtbl" - where do you get that offsetOf_?
hsc2hs has a #peek macro that does this:
p_Ac97CodecIf_vtbl p = (#peek struct ac97codecxzy, vtbl) p
-- creates Haskell code
p_Ac97CodecIf_vtbl p = ((\ hsc_ptr -> peekByteOff hsc_ptr 96) p
Hope that may help a little!
Donn
More information about the Haskell-Cafe
mailing list