Re: Issues with ld.so loading in games/yquake2

2018-09-23 Thread Aaron Bieber
On Sun, 23 Sep 2018 at 22:15:24 +0200, Adam Wolk wrote:
> Hi ports@
> 
> I have a WIP update of games/yquake2 taking it from 7.21 to 7.30 here
>   https://gist.github.com/mulander/a749cb99590619748c141161c830dbeb
> 
> Testing revealed that the default ref_gl1 renderer results in the game
> failing to start while other renderers work.
> 
> Reproduction (unfortunately requires the game data files)
> 
> $ quake2 +set vid_renderer gl1  # crash
> $ quake2 +set vid_renderer gl3  # OK
> $ quake2 +set vid_renderer soft # OK
> 
> I re-tested on 7.21 and all above renderers worked.
> 
> I think the problem is with ld.so behavior on OpenBSD but I'm not sure
> how to debug this further and would appreciate any help. Here is how I
> arrived at this conclusion:
> 
> The crash indicates that symbols from glapi are not found
> https://gist.github.com/mulander/223ff586976e61707ee5581156f1369e
> 
> ... snip ...
> quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol 
> '_glapi_set_context'
> quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol 
> '_glapi_set_dispatch'
> libGL error: unable to load driver: i965_dri.so
> ... snip ...

Can confirm! vid_renderer set to gl1 causes the following:

quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol
'_glapi_Dispatch'
quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol
'_glapi_Context'
...
quake2:/usr/X11R6/lib/modules/dri/swrast_dri.so: undefined symbol
'_glapi_set_dispatch'
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request:  BadValue (integer parameter out of range for
operation)
  Major opcode of failed request:  155 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  115
  Current serial number in output stream:  116
AL lib: (EE) alc_cleanup: 1 device not closed

> 
> I started comparing both versions with the help of upstream (caedes).
> The game uses dlopen(3) to load ref_gl1.so (their renderer) which itself
> links against libGL.so which in turn links against libglapi.so.
> 
> This is true for the new version:
>  https://gist.github.com/mulander/f8b3d1e4e82cd0f48edf5096391ac0dd (ldd 
> output)
> 
> and the old one
>  https://gist.github.com/mulander/0762234a443c2bdb11b5629cf00b1eea (ldd 
> output)
> 
> I grabbed a kdump from the 7.30 run
> 
>  
> https://gist.githubusercontent.com/mulander/7d99e5195e723b9297e917d092a0b0ef/raw/e70183eb27cf2288df0598490532bb13db0d68f1/7.30%2520kdump
> 
> and checked if the differences between the main binary itself could have had
> impact:
> 
>  https://gist.github.com/mulander/effd79c3cf7e6558cfdbc9a631f9152c (ldd 
> output left one is 7.21)
> 
> I finally ran both versions with LD_DEBUG set, both seem to be loading 
> libglapi.so
> via the same depdency chain ref_gl1.so -> libGL.so -> libglapi.so
> however the new one fails and this is where my debugging ability for this 
> issue
> fails (output[1] below). I did a final test by running the game with 
> LD_PRELOAD
> 
>   LD_PRELOAD=/usr/X11R6/lib/libglapi.so.0.2 quake2
> 
> and with the above, the ref_gl1.so renderer works (game launches and is 
> playable).
> 
> I would appreciate any help in diagnosing this issue.
> 
> Regards,
> Adam
> 
> [1]
> 7.21:
> 
> https://gist.githubusercontent.com/mulander/7fb326be6848228ef72debe7ea5a7407/raw/30ee52e5458145ca7d9eb85f9e5985b44e9bb306/debug721
>  (7.21)
> 
> ... snip ...
> loading: libGL.so.17.1 required by ./ref_gl1.so
>  flags /usr/X11R6/lib/libGL.so.17.1 = 0x0
> ... snip ...
> loading: libglapi.so.0.2 required by /usr/X11R6/lib/libGL.so.17.1
>  flags /usr/X11R6/lib/libglapi.so.0.2 = 0x0
> 
> 7.30:
> 
> ... snip ...
> loading: libGL.so.17.1 required by ./ref_gl1.so
>  flags /usr/X11R6/lib/libGL.so.17.1 = 0x0
> ... snip ...
> loading: libglapi.so.0.2 required by /usr/X11R6/lib/libGL.so.17.1
>  flags /usr/X11R6/lib/libglapi.so.0.2 = 0x0
> ... snip ...
> 
> https://gist.githubusercontent.com/mulander/7fb326be6848228ef72debe7ea5a7407/raw/30ee52e5458145ca7d9eb85f9e5985b44e9bb306/debug730
>  (7.30)7.30:
> 
> 
> 

-- 
PGP: 0x1F81112D62A9ADCE / 3586 3350 BFEA C101 DB1A  4AF0 1F81 112D 62A9 ADCE



Issues with ld.so loading in games/yquake2

2018-09-23 Thread Adam Wolk
Hi ports@

I have a WIP update of games/yquake2 taking it from 7.21 to 7.30 here
  https://gist.github.com/mulander/a749cb99590619748c141161c830dbeb

Testing revealed that the default ref_gl1 renderer results in the game
failing to start while other renderers work.

Reproduction (unfortunately requires the game data files)

$ quake2 +set vid_renderer gl1  # crash
$ quake2 +set vid_renderer gl3  # OK
$ quake2 +set vid_renderer soft # OK

I re-tested on 7.21 and all above renderers worked.

I think the problem is with ld.so behavior on OpenBSD but I'm not sure
how to debug this further and would appreciate any help. Here is how I
arrived at this conclusion:

The crash indicates that symbols from glapi are not found
https://gist.github.com/mulander/223ff586976e61707ee5581156f1369e

... snip ...
quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol 
'_glapi_set_context'
quake2:/usr/X11R6/lib/modules/dri/i965_dri.so: undefined symbol 
'_glapi_set_dispatch'
libGL error: unable to load driver: i965_dri.so
... snip ...

I started comparing both versions with the help of upstream (caedes).
The game uses dlopen(3) to load ref_gl1.so (their renderer) which itself
links against libGL.so which in turn links against libglapi.so.

This is true for the new version:
 https://gist.github.com/mulander/f8b3d1e4e82cd0f48edf5096391ac0dd (ldd output)

and the old one
 https://gist.github.com/mulander/0762234a443c2bdb11b5629cf00b1eea (ldd output)

I grabbed a kdump from the 7.30 run

 
https://gist.githubusercontent.com/mulander/7d99e5195e723b9297e917d092a0b0ef/raw/e70183eb27cf2288df0598490532bb13db0d68f1/7.30%2520kdump

and checked if the differences between the main binary itself could have had
impact:

 https://gist.github.com/mulander/effd79c3cf7e6558cfdbc9a631f9152c (ldd output 
left one is 7.21)

I finally ran both versions with LD_DEBUG set, both seem to be loading 
libglapi.so
via the same depdency chain ref_gl1.so -> libGL.so -> libglapi.so
however the new one fails and this is where my debugging ability for this issue
fails (output[1] below). I did a final test by running the game with LD_PRELOAD

  LD_PRELOAD=/usr/X11R6/lib/libglapi.so.0.2 quake2

and with the above, the ref_gl1.so renderer works (game launches and is 
playable).

I would appreciate any help in diagnosing this issue.

Regards,
Adam

[1]
7.21:

https://gist.githubusercontent.com/mulander/7fb326be6848228ef72debe7ea5a7407/raw/30ee52e5458145ca7d9eb85f9e5985b44e9bb306/debug721
 (7.21)

... snip ...
loading: libGL.so.17.1 required by ./ref_gl1.so
 flags /usr/X11R6/lib/libGL.so.17.1 = 0x0
... snip ...
loading: libglapi.so.0.2 required by /usr/X11R6/lib/libGL.so.17.1
 flags /usr/X11R6/lib/libglapi.so.0.2 = 0x0

7.30:

... snip ...
loading: libGL.so.17.1 required by ./ref_gl1.so
 flags /usr/X11R6/lib/libGL.so.17.1 = 0x0
... snip ...
loading: libglapi.so.0.2 required by /usr/X11R6/lib/libGL.so.17.1
 flags /usr/X11R6/lib/libglapi.so.0.2 = 0x0
... snip ...

https://gist.githubusercontent.com/mulander/7fb326be6848228ef72debe7ea5a7407/raw/30ee52e5458145ca7d9eb85f9e5985b44e9bb306/debug730
 (7.30)7.30: