[fpc-devel] WebAssembly compilation problems - Wasm32 symbol xxx without index value error

Michalis Kamburelis michalis.kambi at gmail.com
Fri Mar 31 00:19:27 CEST 2023


Thanks for the answers,

I have submitted issue
https://gitlab.com/freepascal.org/fpc/source/-/issues/40229 describing
how to reproduce the problem.

Hopefully it can get some attention :) I would very much like to add
"web" target to CGE, to be able to just run CGE games in a browser.
It's going to be my highest-priority thing after upcoming CGE 7.0
release.

Regards,
Michalis

czw., 30 mar 2023 o 21:11 Nikolay Nikolov via fpc-devel
<fpc-devel at lists.freepascal.org> napisał(a):
>
>
> On 3/28/23 02:12, Michalis Kamburelis via fpc-devel wrote:
> > Hi,
> >
> > We're experimenting with compiling Castle Game Engine using FPC
> > WebAssembly target.
> >
> > A lot of units and classes compiled smoothly, however we hit a weird
> > bug(s) at compiling our (big, too big!) unit X3DNodes. We get errors
> > "Wasm32 symbol xxx without index value error" at the code trying to
> > use various property setters or methods. Examples:
> >
> > x3dcamerautils.pas(344,0) Error: Wasm32 symbol
> > X3DFIELDS$_$TSFROTATION_$__$$_SETVALUE$TGENERICVECTOR4 without index
> > value error
> >
> > // where TSFRotation.Value is a property with record type, with getter
> > and setter methods
> >
> > x3dcamerautils.pas(344,0) Error: Wasm32 symbol
> > X3DFIELDS$_$TX3DSIMPLEMULTFIELD$3$CRCD1E2ED59_CRCAB5A7799_$__$$_GETITEMS$$TSINGLELIST
> > without index value error
> >
> > // where TX3DSimpleMultField.GetItems is a method of a generic class)
> >
> > x3dcamerautils.pas(344,0) Error: Wasm32 symbol
> > X3DFIELDS$_$TSFFLOAT_$__$$_SETVALUE$SINGLE without index value error
> > x3dcamerautils.pas(344,0) Error: Wasm32 symbol
> >
> > // where TSFFloat.SetValue is a simple setter for a Single property, no generics
> >
> > castlescenecore.pas(8822,0) Error: Wasm32 symbol
> > CASTLESHAPEINTERNALSHADOWVOLUMES$_$TSHAPESHADOWVOLUMES_$__$$_PREPARERESOURCES
> > without index value error
> >
> > // where TShapeShadowVolumes.PrepareResources is a simple method,
> > without any parameters, in a simple non-generic class
> >
> > Weirder, on another machine, the symbols reported contain some exe
> > filenames at the place of initial "$_$" (maybe independent compiler
> > bug at message display?):
> >
> > x3dloadinternalgeo.pas(234,0) Error: Wasm32 symbol
> > X3DFIELDS/usr/bin/dbus-update-activation-environmentTSFFLOAT_$__$$_SETVALUE$SINGLE
> > without index value error
> >
> > x3dloadinternalgeo.pas(234) Error: Wasm32 symbol
> > X3DFIELDS/home/michalis/bin/castle-engineTSFFLOAT_$__$$_SETVALUE$SINGLE
> > without index value error
> >
> > Sometimes the errors can be workarounded by some simple actions --
> > like moving the property getter/setter protected->private, or avoiding
> > the call to that particular method. But the solutions, as well as
> > causes, seem ~random from our perspective. And all in all, we didn't
> > finish the compilation of X3DNodes unit because after each
> > fix/workaround/hack for a specific case, another similar error pops
> > up.
> >
> > Grepping FPC for the asmw_e_illegal_unset_index (this is "Wasm32
> > symbol $1 without index value error"), the error can occur when symbol
> > cannot be found in the list where compiler expected it to be.
> >
> > We don't have any simple bugreport about it (yet), as the error really
> > manifests only in a big unit, that is interconnected with a few other
> > big units. Isolating the testcase (and/or doing much needed refactor
> > of this unit :) ) will take a while.
> >
> > Does anyone have a hint:
> >
> > - What does this error really mean? What is internally wrong at
> > compilation to cause it? What could be the culprit?
> >
> > - Is there some universal workaround for it (on CGE side) or fix on
> > the compiler side?
> >
> > Even a vague hint could at least help us prepare an isolated
> > bugreport, because otherwise we have a rather big chunk of code to
> > dissect in order to provide a simple FPC testcase :)
>
> Even a big unit is fine for a bug report, as long as all the code is
> publicly available for download. If you can't seem to get it to
> reproduce with a small test case, you can mention in the bug report that
> you tried, but didn't succeed and still provide the full code needed.
> AFAIK, the Castle Game Engine is open-source, so this shouldn't be a
> problem?
>
> Nikolay
>
> >
> > Regards,
> > Michalis
> > _______________________________________________
> > fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


More information about the fpc-devel mailing list