Summary: | indirect_glx.c:350: multiple definition of `indirect_create_context' | ||
---|---|---|---|
Product: | Mesa | Reporter: | Vinson Lee <vlee> |
Component: | Mesa core | Assignee: | mesa-dev |
Status: | RESOLVED FIXED | QA Contact: | |
Severity: | blocker | ||
Priority: | medium | CC: | idr, jon.turney, kenneth |
Version: | git | Keywords: | regression |
Hardware: | x86-64 (AMD64) | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: |
nm -u src/glx/tests/*.o
Patch to glx/tests to provide a stub __glXGetCurrentContext() function when $(DEFINES) are such that is not a macro |
Description
Vinson Lee
2013-11-11 18:21:36 UTC
17c94de33baf66ad5c264b7a046394c651bc6126 is the first bad commit commit 17c94de33baf66ad5c264b7a046394c651bc6126 Author: Ian Romanick <ian.d.romanick@intel.com> Date: Mon Sep 10 17:11:33 2012 +0300 mesa/dri: Add basic plumbing for GLX_ARB_robustness reset notification strategy No drivers advertise the DRI2 extension yet, so no driver should ever see a value other than false for notify_reset. The changes in nouveau use tabs because nouveau seems to have it's own indentation rules. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> :040000 040000 76b2737e9b48d9c042d4bc05020803c7328d605a dba600f5c9a4c2e147e30e60fbd5b7f286aaa17a M src bisect run success That is bizarre. I always 'make check' as part of my build, and I haven't seen that failure. There must be something different about your configure flags that allows this to happen. Something is happening that causes src/glx/indirect_glx.o go get pulled in when linking glx-test, and it should not. Can you attach the output of 'nm -u src/glx/tests/*.o'? Created attachment 89058 [details]
nm -u src/glx/tests/*.o
Hrm... diffing that with mine doesn't show anything obvious. How about 'nm -u src/glx/.libs/create_context.o'? I get: [idr@mumford-wire master-64]$ nm -u src/glx/.libs/create_context.o U __assert_fail U free U GetGLXScreenConfigs U _GLOBAL_OFFSET_TABLE_ U __glXSendErrorForXcb U indirect_create_context_attribs U xcb_generate_id U xcb_glx_create_context_attribs_arb_checked U xcb_request_check U XGetXCBConnection I see the same output. $ nm -u src/glx/.libs/create_context.o U __assert_fail U free U GetGLXScreenConfigs U _GLOBAL_OFFSET_TABLE_ U __glXSendErrorForXcb U indirect_create_context_attribs U xcb_generate_id U xcb_glx_create_context_attribs_arb_checked U xcb_request_check U XGetXCBConnection I'm really confused now. :( You're sure that bisect is good? There's nothing in that commit that modifies any file under src/glx. I'm also not able to reproduce this even using your configure options. If you revert changes to Makefile.am made by these two commits, test builds and passess fine: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c5330226f391a7a29b6538851090b0ef730a239 http://cgit.freedesktop.org/mesa/mesa/commit/?id=0cce5538673148ffcd7aa9479f6b88cf9a641352 Even to be more precise, (manually) reverting this commit fixes the issue, at least here: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0cce5538673148ffcd7aa9479f6b88cf9a641352 Reproducible with GCC 4.8.2 and Binutils 2.23.2. Hm... does building with --enable-glx-tls help? I wonder if the added __glXGetCurrentContext in fake_glx_screen.cpp is to blame. It builds for me if query_renderer_unittest.cpp is removed from list of source files without any modifications to fake_glx_screen.cpp And indeed, using --enable-glx-tls seems to fix the build. Created attachment 89110 [details] [review] Patch to glx/tests to provide a stub __glXGetCurrentContext() function when $(DEFINES) are such that is not a macro (In reply to comment #9) > Hm... does building with --enable-glx-tls help? I wonder if the added > __glXGetCurrentContext in fake_glx_screen.cpp is to blame. Apparently so. Here's the relevant output doing a build with LDFLAGS=-Wl,--print-map > Archive member included because of file (symbol) > > ../../../src/glx/.libs/libglx.a(clientinfo.o) > clientinfo_unittest.o (__glX_send_client_info) > ../../../src/glx/.libs/libglx.a(create_context.o) > create_context_unittest.o (glXCreateContextAttribsARB) > ../../../src/glx/.libs/libglx.a(indirect_size.o) > enum_sizes.o (__glCallLists_size) > ../../../src/glx/.libs/libglx.a(indirect_init.o) > indirect_api.o (__glXNewIndirectAPI) > ../../../src/glx/.libs/libglx.a(query_renderer.o) > query_renderer_unittest.o (glXQueryRendererIntegerMESA) > ../../../src/glx/.libs/libglx.a(glxcurrent.o) > ../../../src/glx/.libs/libglx.a(query_renderer.o) (__glXGetCurrentContext) > ../../../src/glx/.libs/libglx.a(glxext.o) > ../../../src/glx/.libs/libglx.a(glxcurrent.o) (__glXSetupForCommand) > ../../../src/glx/.libs/libglx.a(glxconfig.o) > ../../../src/glx/.libs/libglx.a(glxext.o) (glx_config_destroy_list) > ../../../src/glx/.libs/libglx.a(glx_query.o) > ../../../src/glx/.libs/libglx.a(glxext.o) (__glXQueryServerString) > ../../../src/glx/.libs/libglx.a(glxhash.o) > ../../../src/glx/.libs/libglx.a(glxext.o) (__glxHashCreate) > ../../../src/glx/.libs/libglx.a(indirect_glx.o) > ../../../src/glx/.libs/libglx.a(glxext.o) (indirect_create_screen) So it seems that that the removal of the __glXGetCurrentContext stub in commit 8c5330226f391a7a29b6538851090b0ef730a239 "After adding $(DEFINES) to AM_CPPFLAGS, the __glXGetCurrentContext wrapper function is no longer needed and causes compile errors. Using the correct defines causes it to be a macro!" is not always correct. Reading src/glx/glxclient.h, __glXGetCurrentContext is not a macro if HAVE_PTHREAD && !GLX_USE_TLS, so the stub should probably be provided in that case. Patch attached. To ssh://git.freedesktop.org/git/mesa/mesa 21ae513..5ab59e5 master -> master Might be a good idea to pick this up for the 10.0 branch ? |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.