[Xquartz-dev] Help requested debugging rgl under XQuartz

Jeremy Huddleston Sequoia jeremyhu at apple.com
Wed Feb 24 08:41:56 PST 2021


__stack_chk_guard is part of stack protector.

If it's not liking the value in __stack_chk_guard, it means the stack was smashed.

When this is detected, the compiler runtime should call __stack_chk_fail() if implemented or abort if not.  Given that we're not crashing, I wonder if there's a handler somewhere that ends up causing us to return the bad value instead of crashing.

Can you break on __stack_chk_fail and see if that gives us anything useful?




> On Feb 24, 2021, at 06:26, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
> 
> Tracing in with lldb, it appears to be this sequence of calls leading to the 10005 error value:
> 
> r
>  * frame #0: 0x00007fff5afc19e0 libGPUSupportMercury.dylib`gldAttachDrawable + 1
>    frame #1: 0x00007fff4467f396 GLEngine`gliAttachDrawableWithOptions + 251
>    frame #2: 0x00007fff4465d9f5 OpenGL`___lldb_unnamed_symbol40$$OpenGL + 972
>    frame #3: 0x00007fff446618e2 OpenGL`___lldb_unnamed_symbol59$$OpenGL + 82
>    frame #4: 0x00007fff44661c29 OpenGL`CGLSetSurface + 330
>    frame #5: 0x00007fff70c6ca63 libXplugin.1.dylib`xp_attach_gl_context + 95
>    frame #6: 0x0000000108590dee libGL.1.dylib`surface_make_current + 206
>    frame #7: 0x000000010858df6a libGL.1.dylib`apple_glx_make_current_context + 1274
>    frame #8: 0x0000000108574579 libGL.1.dylib`applegl_bind_context + 185
>    frame #9: 0x000000010856237e libGL.1.dylib`MakeContextCurrent + 414
>    frame #10: 0x00000001085621d9 libGL.1.dylib`glXMakeCurrent + 41
> 
> 
> The libGPUSupportMercury.dylib`gldAttachDrawable function calls
> 
> IOAccelGLContextClearDrawable
> 
> then does some sort of check of __stack_chk_guard and doesn't like what it sees, and sets the error.
> 
> Does this give any hint about what's wrong, or a way to fix it?
> 
> Duncan Murdoch
> 
> 
> 
> On 23/02/2021 4:31 p.m., Duncan Murdoch wrote:
>> On 23/02/2021 3:47 p.m., Jeremy Huddleston Sequoia wrote:
>>> 
>>> 
>>>> On Feb 23, 2021, at 06:14, Duncan Murdoch <murdoch.duncan at gmail.com
>>>> <mailto:murdoch.duncan at gmail.com>> wrote:
>>>> 
>>>> On 23/02/2021 12:47 a.m., Jeremy Huddleston Sequoia wrote:
>>>>>> On Feb 22, 2021, at 14:38, Duncan Murdoch <murdoch.duncan at gmail.com
>>>>>> <mailto:murdoch.duncan at gmail.com> <mailto:murdoch.duncan at gmail.com
>>>>>> <mailto:murdoch.duncan at gmail.com>>> wrote:
>>>>>> 
>>>>>> I've made a little bit of progress.
>>>>>> 
>>>>>> The message "error: xp_attach_gl_context returned: 2" comes from the
>>>>>> Mesa routine surface_make_current, which calls xp_attach_gl_context.
>>>>>>  I haven't found where xp_attach_gl_context is defined.
>>>>> xp_attach_gl_context is in libXplugin (check Xplugin.h in the SDK).
>>>>> 2 is XP_BadValue, which is returned if cgl_ctx is NULL... so I'd
>>>>> suggest looking into why mesa is calling xp_attach_gl_context with a
>>>>> NULL context.
>>>> 
>>>> Thanks, that's helpful.  The context is not NULL, so I need to think
>>>> of other ways it could be "bad".
>>> 
>>> Ok, well xp_attach_gl_context is just a wrapper around CGLSetSurface(),
>>> which is an internal function to do exactly what we're trying to do
>>> here.  If it returns any error, xp_attach_gl_context returns bad value.
>>> 
>>> Are you able to capture this in the debugger and figure out what the
>>> return value from CGLSetSurface() is?  That will tell us what the
>>> underlying CGLError is, which might help shed some light on this.
>> I believe it's returning  0x0000000000002715 when there's an error.
>> That's 10005, kCGLBadDrawable.  So now I need to find out what happened
>> to the drawable.
>> This feels like progress!  Thanks again.
>> Duncan
>>> 
>>>> Here's what I see with LIBGL_DIAGNOSTIC=1.  For a successful open,
>>>> 
>>>>> rgl.open()
>>>> function is no-op
>>>> Debug     ../src/glx/apple/apple_glx_context.c:205
>>>> apple_glx_create_context(4295810496): apple_glx_create_context: ac
>>>> 0x100a10a00 ac->context_obj 0x107cdce00
>>>> 2021-02-23 08:23:00.041711-0500 R[45754:1283995]
>>>> apple_glx_create_context: ac 0x100a10a00 ac->context_obj 0x107cdce00
>>>> Debug     ../src/glx/apple/apple_glx_drawable.c:342
>>>> apple_glx_drawable_create(4295810496): apple_glx_drawable_create: new
>>>> drawable 0x107ce0e00
>>>> 2021-02-23 08:23:00.042235-0500 R[45754:1283995]
>>>> apple_glx_drawable_create: new drawable 0x107ce0e00
>>>> Debug     ../src/glx/apple/apple_glx_surface.c:154
>>>> create_surface(4295810496): create_surface: created a surface for
>>>> drawable 0x600066 with uid 621
>>>> 2021-02-23 08:23:00.044773-0500 R[45754:1283995] create_surface:
>>>> created a surface for drawable 0x600066 with uid 621
>>>> Debug     ../src/glx/apple/apple_glx_surface.c:69
>>>> surface_make_current(4295810496): surface_make_current:
>>>> ac->context_obj 0x107cdce00 s->surface_id 9
>>>> 2021-02-23 08:23:00.044839-0500 R[45754:1283995] surface_make_current:
>>>> ac->context_obj 0x107cdce00 s->surface_id 9
>>>> Debug     ../src/glx/apple/apple_glx_surface.c:89
>>>> surface_make_current(4295810496): surface_make_current: drawable 0x600066
>>>> 2021-02-23 08:23:00.045680-0500 R[45754:1283995] surface_make_current:
>>>> drawable 0x600066
>>>> ... (more lines deleted)
>>>> 
>>>> After I run quartz(), I see this:
>>>> 
>>>>> rgl.open()
>>>> Debug     ../src/glx/apple/apple_glx_context.c:205
>>>> apple_glx_create_context(4295810496): apple_glx_create_context: ac
>>>> 0x10262bb00 ac->context_obj 0x1058c4800
>>>> 2021-02-23 08:23:35.666675-0500 R[45754:1283995]
>>>> apple_glx_create_context: ac 0x10262bb00 ac->context_obj 0x1058c4800
>>>> Debug     ../src/glx/apple/apple_glx_drawable.c:342
>>>> apple_glx_drawable_create(4295810496): apple_glx_drawable_create: new
>>>> drawable 0x107648000
>>>> 2021-02-23 08:23:35.667040-0500 R[45754:1283995]
>>>> apple_glx_drawable_create: new drawable 0x107648000
>>>> Debug     ../src/glx/apple/apple_glx_surface.c:154
>>>> create_surface(4295810496): create_surface: created a surface for
>>>> drawable 0x6000c9 with uid 629
>>>> 2021-02-23 08:23:35.669119-0500 R[45754:1283995] create_surface:
>>>> created a surface for drawable 0x6000c9 with uid 629
>>>> Debug     ../src/glx/apple/apple_glx_surface.c:69
>>>> surface_make_current(4295810496): surface_make_current:
>>>> ac->context_obj 0x1058c4800 s->surface_id 13
>>>> 2021-02-23 08:23:35.669195-0500 R[45754:1283995] surface_make_current:
>>>> ac->context_obj 0x1058c4800 s->surface_id 13
>>>> error: xp_attach_gl_context returned: 2
>>>> Debug     ../src/glx/applegl_glx.c:60
>>>> applegl_bind_context(4295810496): applegl_bind_context: error YES
>>>> 2021-02-23 08:23:35.669834-0500 R[45754:1283995] applegl_bind_context:
>>>> error YES
>>>> 
>>>> and then I get my own messages from the failure of glXMakeCurrent().
>>>>  As far as I can see, everything appears fine until the call to
>>>> xp_attach_gl_context.
>>>> 
>>>> 
>>>> Everything looks very similar up to the failure of
>>>> xp_attach_gl_context.  Any idea I why the value returned a few lines
>>>> earlier from apple_glx_create_context() should be a bad value?
>>>> 
>>>> Duncan Murdoch
>>>> 
>>>> 
>>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/xquartz-dev/attachments/20210224/dfd76af1/attachment.htm>


More information about the Xquartz-dev mailing list