Bug 44466

Summary: Assertion 'LLVMOffsetOfElement' when running Furmark with wine
Product: Mesa Reporter: Laurent carlier <lordheavym>
Component: Mesa coreAssignee: Jose Fonseca <jfonseca>
Status: RESOLVED NOTOURBUG QA Contact:
Severity: normal    
Priority: medium CC: gabrielbyrnei, jfonseca
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
See Also: http://bugs.winehq.org/show_bug.cgi?id=30052
https://bugs.freedesktop.org/show_bug.cgi?id=41791
https://bugzilla.novell.com/show_bug.cgi?id=747333
http://llvm.org/bugs/show_bug.cgi?id=12151
Whiteboard:
i915 platform: i915 features:
Attachments: valgrind log on current git/svn versions
patch w/ workaround attempt
patch to log offsets to stderr
patch to dump the target data layout
patch to dump the default target triple

Description Laurent carlier 2012-01-04 14:49:10 UTC
* Mesa (32 bit under 64 os) from git built with llvm 3.0
* Radeon HD 4850
* Last wine version

Mesa is built with llvm 3.0, the bug doesn't seem to occur with llvm 2.9

Here is the output:
[lordh@archMain FurMark_1.9.2]$ wine FurMark.exe 
err:module:load_builtin_dll failed to load .so lib for builtin L"winemp3.acm": libmpg123.so.0: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type
fixme:heap:HeapSetInformation (nil) 1 (nil) 0
fixme:win:EnumDisplayDevicesW ((null),0,0x33eaf0,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3b0): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0x33e4c4,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),1,0x33e4c4,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),0,0x33ec98,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3cc): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0xf0e28c,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x710): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
draw/draw_llvm.c:160:create_jit_texture_type: Assertion `LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_DATA) == __builtin_offsetof (struct draw_jit_texture, data)' failed.
wine: Unhandled exception 0x80000003 at address 0x7cb9cfea (thread 0025), starting debugger...
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:compute_location Only supporting one breg (ecx/18 -> eax/17)
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9e
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
_debug_assert_fail () at /build/src/build/src/gallium/auxiliary/util/u_debug.c:278                                                                                               
0x7cb9cfea _debug_assert_fail+0x57 [/build/src/build/src/gallium/auxiliary/util/u_debug.c:278] in r600_dri.so: int      $3                                                       
Unable to access file '/build/src/build/src/gallium/auxiliary/util/u_debug.c'                                                                                                    
Modules:                                                                                                                                                                         
Module  Address                 Debug info      Name (91 modules)                                                                                                                
PE        400000-  7db000       Deferred        furmark                                                                                                                          
PE        7e0000-  9c5000       Deferred        freeimage                                                                                                                        
PE      10000000-1022e000       Deferred        core3d                                                                                                                           
ELF     7b800000-7b9c4000       Deferred        kernel32<elf>                                                                                                                    
  \-PE  7b810000-7b9c4000       \               kernel32                                                                                                                         
ELF     7bc00000-7bcd2000       Deferred        ntdll<elf>                                                                                                                       
  \-PE  7bc10000-7bcd2000       \               ntdll                                                                                                                            
ELF     7bdc5000-7be00000       Deferred        usp10<elf>
  \-PE  7bdd0000-7be00000       \               usp10
ELF     7bf00000-7bf04000       Deferred        <wine-loader>
ELF     7c2d9000-7c400000       Deferred        libglsl.so
ELF     7c4b7000-7c742000       Deferred        libdricore.so
ELF     7c77d000-7db57000       Dwarf           r600_dri.so
ELF     7db57000-7db8d000       Deferred        uxtheme<elf>
  \-PE  7db60000-7db8d000       \               uxtheme
ELF     7dc2f000-7dc58000       Deferred        libexpat.so.1
ELF     7dc58000-7dc86000       Deferred        libfontconfig.so.1
ELF     7dc86000-7dc96000       Deferred        libxi.so.6
ELF     7dca1000-7dca6000       Deferred        libtxc_dxtn.so
ELF     7dca6000-7dcad000       Deferred        libffi.so.5
ELF     7dcad000-7dcb8000       Deferred        libxcursor.so.1
ELF     7ddd1000-7de81000       Deferred        winex11<elf>
  \-PE  7dde0000-7de81000       \               winex11
ELF     7de81000-7df1d000       Deferred        libfreetype.so.6
ELF     7df2b000-7df34000       Deferred        libxrandr.so.2
ELF     7df34000-7df58000       Deferred        imm32<elf>
  \-PE  7df40000-7df58000       \               imm32
ELF     7df58000-7df8c000       Deferred        ws2_32<elf>
  \-PE  7df60000-7df8c000       \               ws2_32
ELF     7df8c000-7dfff000       Deferred        shlwapi<elf>
  \-PE  7dfa0000-7dfff000       \               shlwapi
ELF     7dfff000-7e22a000       Deferred        shell32<elf>
  \-PE  7e010000-7e22a000       \               shell32
ELF     7e22a000-7e256000       Deferred        msvfw32<elf>
  \-PE  7e230000-7e256000       \               msvfw32
ELF     7e293000-7e296000       Deferred        libxcomposite.so.1
ELF     7e296000-7e29e000       Deferred        libxrender.so.1
ELF     7e29e000-7e2a1000       Deferred        libxinerama.so.1
ELF     7e2a1000-7e2b6000       Deferred        libz.so.1
ELF     7e2b6000-7e2d9000       Deferred        iphlpapi<elf>
  \-PE  7e2c0000-7e2d9000       \               iphlpapi
ELF     7e2d9000-7e356000       Deferred        rpcrt4<elf>
  \-PE  7e2e0000-7e356000       \               rpcrt4
ELF     7e356000-7e47d000       Deferred        ole32<elf>
  \-PE  7e370000-7e47d000       \               ole32
ELF     7e47d000-7e526000       Deferred        winmm<elf>
  \-PE  7e480000-7e526000       \               winmm
ELF     7e526000-7e52c000       Deferred        libuuid.so.1
ELF     7e52c000-7e543000       Deferred        libice.so.6
ELF     7e543000-7e54a000       Deferred        libsm.so.6
ELF     7e54a000-7e620000       Deferred        opengl32<elf>
  \-PE  7e560000-7e620000       \               opengl32
ELF     7e620000-7e629000       Deferred        librt.so.1
ELF     7e629000-7e62e000       Deferred        libxdmcp.so.6
ELF     7e62e000-7e63b000       Deferred        libdrm.so.2
ELF     7e63b000-7e653000       Deferred        libxcb.so.1
ELF     7e653000-7e664000       Deferred        libxcb-glx.so.0
ELF     7e664000-7e79c000       Deferred        libx11.so.6
ELF     7e79c000-7e7af000       Deferred        libxext.so.6
ELF     7e7af000-7e7dc000       Deferred        libglapi.so.0
ELF     7e7dc000-7e7f7000       Deferred        libgcc_s.so.1
ELF     7e8e0000-7e937000       Deferred        libgl.so.1
ELF     7e937000-7e9a4000       Deferred        libglu.so.1
ELF     7e9a5000-7e9b5000       Deferred        libbz2.so.1.0
ELF     7e9b5000-7e9df000       Deferred        msacm32<elf>
  \-PE  7e9c0000-7e9df000       \               msacm32
ELF     7ea04000-7eacd000       Deferred        gdi32<elf>
  \-PE  7ea10000-7eacd000       \               gdi32
ELF     7eacd000-7ec1f000       Deferred        user32<elf>
  \-PE  7eae0000-7ec1f000       \               user32
ELF     7ec1f000-7ed21000       Deferred        comctl32<elf>
  \-PE  7ec30000-7ed21000       \               comctl32
ELF     7ed21000-7ed8a000       Deferred        advapi32<elf>
  \-PE  7ed30000-7ed8a000       \               advapi32
ELF     7ef8a000-7ef97000       Deferred        libnss_files.so.2
ELF     7ef97000-7efc5000       Deferred        libm.so.6
ELF     7efc6000-7efc9000       Deferred        libxau.so.6
ELF     7efc9000-7efce000       Deferred        libxxf86vm.so.1
ELF     7efce000-7efe6000       Deferred        glu32<elf>
  \-PE  7efd0000-7efe6000       \               glu32
ELF     7efe6000-7f000000       Deferred        version<elf>
  \-PE  7eff0000-7f000000       \               version
ELF     f7482000-f7485000       Deferred        libx11-xcb.so.1
ELF     f7487000-f748c000       Deferred        libdl.so.2
ELF     f748c000-f762f000       Deferred        libc.so.6
ELF     f762f000-f764a000       Deferred        libpthread.so.0
ELF     f764a000-f7650000       Deferred        libxfixes.so.3
ELF     f7682000-f7685000       Deferred        libxdamage.so.1
ELF     f7685000-f77c8000       Dwarf           libwine.so.1
ELF     f77c9000-f77eb000       Deferred        ld-linux.so.2
ELF     f77eb000-f77ec000       Deferred        [vdso].so
Threads:
process  tid      prio (all id:s are in hex)
00000008 (D) C:\Program Files\Geeks3D\Benchmarks\FurMark_1.9.2\FurMark.exe
        00000025    0 <==
        00000009    0
0000000e services.exe
        0000001f    0
        0000001e    0
        00000019    0
        00000018    0
        00000017    0
        00000015    0
        00000010    0
        0000000f    0
00000012 winedevice.exe
        0000001a    0
        00000014    0
        00000013    0
0000001b plugplay.exe
        00000020    0
        0000001d    0
        0000001c    0
00000021 explorer.exe
        00000022    0
Backtrace:
=>0 0x7cb9cfea _debug_assert_fail+0x57(expr="LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_DATA) == __builtin_offsetof (struct draw_jit_texture, data)", file="draw/draw_llvm.c", line=0xa0, function="create_jit_texture_type") [/build/src/build/src/gallium/auxiliary/util/u_debug.c:278] in r600_dri.so (0x7c2b1744)
  1 0x7cc095a2 create_jit_types+0x315(llvm=0x7bbf9510) [/build/src/build/src/gallium/auxiliary/draw/draw_llvm.c:158] in r600_dri.so (0x7c2b1744)
  2 0x7cc0a312 draw_llvm_generate+0x106(llvm=0x7bbf9510, variant=0x7baa3af0, elts=0) [/build/src/build/src/gallium/auxiliary/draw/draw_llvm.c:344] in r600_dri.so (0x7c285518)
  3 0x7cc0cebd draw_llvm_create_variant+0x1d0(llvm=0x7bbf9510, num_inputs=0x3, key=0xf0de60) [/build/src/build/src/gallium/auxiliary/draw/draw_llvm.c:447] in r600_dri.so (0x783fc1e8)
  4 0x7cc0f971 llvm_middle_end_prepare+0x326(middle=0x7c28c9a0, in_prim=0, opt=0x7, max_vertices=0x7ba6fe44) [/build/src/build/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:174] in r600_dri.so (0x00000000)
draw/draw_llvm.c:163:create_jit_texture_type: Assertion `LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_MIN_LOD) == __builtin_offsetof (struct draw_jit_texture, min_lod)' failed.
err:ntdll:RtlpWaitForCriticalSection section 0x7de7c2a0 "../../../wine/dlls/winex11.drv/x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0009, blocked by 0025, retrying (60 sec)
Comment 1 Laurent carlier 2012-01-04 15:03:09 UTC
It doesn't assert with DRAW_USE_LLVM=0
Comment 2 Laurent carlier 2012-01-04 15:07:14 UTC
...mesa-7.11.2 seem also to be affected by this bug
Comment 3 Michel Dänzer 2012-01-05 09:17:47 UTC
(In reply to comment #1)
> It doesn't assert with DRAW_USE_LLVM=0

So it's an issue in the draw module, not the driver. Reassigning.
Comment 4 Jose Fonseca 2012-01-12 08:19:42 UTC
I really don't understand how this would fail for this particular program.

Does it happen w/ other 32bit apps?

Please modify the code to print

  LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_MIN_LOD)

  offsetof (struct draw_jit_texture, min_lod)

in separate before the assertion, to see which is the odd value.
Comment 5 Laurent carlier 2012-01-13 15:44:46 UTC
I've tried native 32 bits program like ETQW/penumbra overture/Quake 4 without problems.

What is the proper way to display these values ?
I've tried something like:
   lp_build_printf(gallivm, "LLVMOffsetOfElement=%d :: offsetof=%d\n",
                   LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_DATA),
		   offsetof (struct draw_jit_texture, data));

But without success:
[lordh@archMain FurMark_1.9.2]$ wine FurMark.exe 
err:module:load_builtin_dll failed to load .so lib for builtin L"winemp3.acm": libmpg123.so.0: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type
fixme:heap:HeapSetInformation (nil) 1 (nil) 0
fixme:win:EnumDisplayDevicesW ((null),0,0x33eaf0,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3b0): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0x33e4c4,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),1,0x33e4c4,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),0,0x33ec98,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3cc): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0xf0e28c,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3cc): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
wine: Unhandled page fault on read access to 0x000000a0 at address 0x7b06d024 (thread 0022), starting debugger...
Unhandled exception: page fault on read access to 0x000000a0 in 32-bit code (0x7b06d024).
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:compute_location Only supporting one breg (ecx/18 -> eax/17)
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9e
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
fixme:dbghelp_dwarf:compute_location Unhandled attr op: 9d
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b                                                                                                                                                           
 EIP:7b06d024 ESP:00f0d480 EBP:00f0d5c0 EFLAGS:00010216(  R- --  I   -A-P- )                                                                                                                               
 EAX:00000098 EBX:7b572314 ECX:7d600018 EDX:7b3a7dd6                                                                                                                                                       
 ESI:00000001 EDI:00000098                                                                                                                                                                                 
Stack dump:                                                                                                                                                                                                
0x00f0d480:  7a8db581 00000098 7c23e644 00f0d4c4                                                                                                                                                           
0x00f0d490:  00000002 7b3a7dd6 00000004 7d1cef14                                                                                                                                                           
0x00f0d4a0:  7b040767 7d1cef14 7d1ce814 00000002                                                                                                                                                           
0x00f0d4b0:  7d1aa6c8 7d1af868 7b3a7dd6 784ca8d0                                                                                                                                                           
0x00f0d4c0:  00000003 7c23aba0 7c23aba0 784cadac                                                                                                                                                           
0x00f0d4d0:  7b572314 7c23e5c0 784c9178 00000004                                                                                                                                                           
000c: sel=0067 base=00000000 limit=00000000 32-bit r-x                                                                                                                                                     
Backtrace:                                                                                                                                                                                                 
=>0 0x7b06d024 LLVMTypeOf+0x4() in r600_dri.so (0x00f0d5c0)                                                                                                                                                
  1 0x7a8db581 lp_build_printf+0x1e9(gallivm=0x7d1a2de8, fmt=<is not available>) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/gallivm/lp_bld_printf.c:119] in r600_dri.so (0x00f0d5c0)  
  2 0x7a8ae2f4 create_jit_types+0x307(llvm=0x7c6c7b70) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:159] in r600_dri.so (0x7d1cef14)
  3 0x7a8af5df draw_llvm_generate+0x106(llvm=0x7c6c7b70, variant=0x7c23e348, elts=0) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:358] in r600_dri.so (0x7d1a2de8)
  4 0x7a8b1dad draw_llvm_create_variant+0x23c(llvm=0x7c6c7b70, num_inputs=0x3, key=0xf0de60) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:461] in r600_dri.so (0x7c239ff0)
  5 0x7a8b4803 llvm_middle_end_prepare+0x2c8(middle=0x7c6d1f58, in_prim=0, opt=0x7, max_vertices=0x7c6cf484) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:162] in r600_dri.so (0x7c6d1f58)
  6 0x7a822336 vsplit_prepare+0xbd(frontend=0x7c6cf468, in_prim=0, middle=0x7c6d1f58, opt=0x7) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_pt_vsplit.c:175] in r600_dri.so (0x00000000)
0x7b06d024 LLVMTypeOf+0x4 in r600_dri.so: movl  0x8(%eax),%eax
Modules:
Module  Address                 Debug info      Name (91 modules)
PE        400000-  7db000       Deferred        furmark
PE        7e0000-  9c5000       Deferred        freeimage
PE      10000000-1022e000       Deferred        core3d
ELF     7a41e000-7b800000       Dwarf           r600_dri.so
ELF     7b800000-7b9c4000       Deferred        kernel32<elf>
  \-PE  7b810000-7b9c4000       \               kernel32
ELF     7bc00000-7bcd2000       Deferred        ntdll<elf>
  \-PE  7bc10000-7bcd2000       \               ntdll
ELF     7bf00000-7bf04000       Deferred        <wine-loader>
ELF     7d7c7000-7d802000       Deferred        usp10<elf>
  \-PE  7d7d0000-7d802000       \               usp10
ELF     7d8af000-7d8b4000       Deferred        libtxc_dxtn.so
ELF     7d8b4000-7d9dd000       Deferred        libglsl.so
ELF     7d9dd000-7dc67000       Deferred        libdricore.so
ELF     7dca2000-7dcad000       Deferred        libxcursor.so.1
ELF     7dcb0000-7dce6000       Deferred        uxtheme<elf>
  \-PE  7dcc0000-7dce6000       \               uxtheme
ELF     7dd7a000-7dda3000       Deferred        libexpat.so.1
ELF     7dda3000-7ddd1000       Deferred        libfontconfig.so.1
ELF     7ddd1000-7dde1000       Deferred        libxi.so.6
ELF     7dde1000-7dde8000       Deferred        libffi.so.5
ELF     7de1c000-7decc000       Deferred        winex11<elf>
  \-PE  7de30000-7decc000       \               winex11
ELF     7decc000-7dee1000       Deferred        libz.so.1
ELF     7dee1000-7df7d000       Deferred        libfreetype.so.6
ELF     7df80000-7df83000       Deferred        libxcomposite.so.1
ELF     7df83000-7df8c000       Deferred        libxrandr.so.2
ELF     7df8c000-7df94000       Deferred        libxrender.so.1
ELF     7df94000-7dfb8000       Deferred        imm32<elf>
  \-PE  7dfa0000-7dfb8000       \               imm32
ELF     7dfb8000-7dfec000       Deferred        ws2_32<elf>
  \-PE  7dfc0000-7dfec000       \               ws2_32
ELF     7dfec000-7e05f000       Deferred        shlwapi<elf>
  \-PE  7e000000-7e05f000       \               shlwapi
ELF     7e05f000-7e28a000       Deferred        shell32<elf>
  \-PE  7e070000-7e28a000       \               shell32
ELF     7e28a000-7e2b6000       Deferred        msvfw32<elf>
  \-PE  7e290000-7e2b6000       \               msvfw32
ELF     7e2b6000-7e2d9000       Deferred        iphlpapi<elf>
  \-PE  7e2c0000-7e2d9000       \               iphlpapi
ELF     7e2d9000-7e356000       Deferred        rpcrt4<elf>
  \-PE  7e2e0000-7e356000       \               rpcrt4
ELF     7e356000-7e47d000       Deferred        ole32<elf>
  \-PE  7e370000-7e47d000       \               ole32
ELF     7e47d000-7e526000       Deferred        winmm<elf>
  \-PE  7e480000-7e526000       \               winmm
ELF     7e526000-7e52c000       Deferred        libuuid.so.1
ELF     7e52c000-7e543000       Deferred        libice.so.6
ELF     7e543000-7e54a000       Deferred        libsm.so.6
ELF     7e54a000-7e620000       Deferred        opengl32<elf>
  \-PE  7e560000-7e620000       \               opengl32
ELF     7e620000-7e629000       Deferred        librt.so.1
ELF     7e629000-7e62e000       Deferred        libxdmcp.so.6
ELF     7e62e000-7e63b000       Deferred        libdrm.so.2
ELF     7e63b000-7e653000       Deferred        libxcb.so.1
ELF     7e653000-7e664000       Deferred        libxcb-glx.so.0
ELF     7e664000-7e79c000       Deferred        libx11.so.6
ELF     7e79c000-7e7af000       Deferred        libxext.so.6
ELF     7e7af000-7e7dc000       Deferred        libglapi.so.0
ELF     7e7dc000-7e7f7000       Deferred        libgcc_s.so.1
ELF     7e8e0000-7e937000       Deferred        libgl.so.1
ELF     7e937000-7e9a4000       Deferred        libglu.so.1
ELF     7e9a5000-7e9b5000       Deferred        libbz2.so.1.0
ELF     7e9b5000-7e9df000       Deferred        msacm32<elf>
  \-PE  7e9c0000-7e9df000       \               msacm32
ELF     7ea04000-7eacd000       Deferred        gdi32<elf>
  \-PE  7ea10000-7eacd000       \               gdi32
ELF     7eacd000-7ec1f000       Deferred        user32<elf>
  \-PE  7eae0000-7ec1f000       \               user32
ELF     7ec1f000-7ed21000       Deferred        comctl32<elf>
  \-PE  7ec30000-7ed21000       \               comctl32
ELF     7ed21000-7ed8a000       Deferred        advapi32<elf>
  \-PE  7ed30000-7ed8a000       \               advapi32
ELF     7ef8a000-7ef97000       Deferred        libnss_files.so.2
ELF     7ef97000-7efc5000       Deferred        libm.so.6
ELF     7efc6000-7efc9000       Deferred        libxinerama.so.1
ELF     7efc9000-7efce000       Deferred        libxxf86vm.so.1
ELF     7efce000-7efe6000       Deferred        glu32<elf>
  \-PE  7efd0000-7efe6000       \               glu32
ELF     7efe6000-7f000000       Deferred        version<elf>
  \-PE  7eff0000-7f000000       \               version
ELF     f73b1000-f73b7000       Deferred        libxfixes.so.3
ELF     f73b9000-f73be000       Deferred        libdl.so.2
ELF     f73be000-f7561000       Deferred        libc.so.6
ELF     f7561000-f757c000       Deferred        libpthread.so.0
ELF     f757d000-f7580000       Deferred        libxau.so.6
ELF     f75b1000-f75b4000       Deferred        libx11-xcb.so.1
ELF     f75b4000-f75b7000       Deferred        libxdamage.so.1
ELF     f75b7000-f76fa000       Dwarf           libwine.so.1
ELF     f76fb000-f771d000       Deferred        ld-linux.so.2
ELF     f771d000-f771e000       Deferred        [vdso].so
Threads:
process  tid      prio (all id:s are in hex)
00000008 (D) C:\Program Files\Geeks3D\Benchmarks\FurMark_1.9.2\FurMark.exe
        00000022    0 <==
        00000009    0
0000000e services.exe
        0000001e    0
        0000001d    0
        00000018    0
        00000017    0
        00000015    0
        00000010    0
        0000000f    0
00000012 winedevice.exe
        00000019    0
        00000014    0
        00000013    0
0000001a plugplay.exe
        0000001f    0
        0000001c    0
        0000001b    0
00000020 explorer.exe
        00000021    0
Backtrace:
=>0 0x7b06d024 LLVMTypeOf+0x4() in r600_dri.so (0x00f0d5c0)
  1 0x7a8db581 lp_build_printf+0x1e9(gallivm=0x7d1a2de8, fmt=<is not available>) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/gallivm/lp_bld_printf.c:119] in r600_dri.so (0x00f0d5c0)
  2 0x7a8ae2f4 create_jit_types+0x307(llvm=0x7c6c7b70) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:159] in r600_dri.so (0x7d1cef14)
  3 0x7a8af5df draw_llvm_generate+0x106(llvm=0x7c6c7b70, variant=0x7c23e348, elts=0) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:358] in r600_dri.so (0x7d1a2de8)
  4 0x7a8b1dad draw_llvm_create_variant+0x23c(llvm=0x7c6c7b70, num_inputs=0x3, key=0xf0de60) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_llvm.c:461] in r600_dri.so (0x7c239ff0)
  5 0x7a8b4803 llvm_middle_end_prepare+0x2c8(middle=0x7c6d1f58, in_prim=0, opt=0x7, max_vertices=0x7c6cf484) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:162] in r600_dri.so (0x7c6d1f58)
  6 0x7a822336 vsplit_prepare+0xbd(frontend=0x7c6cf468, in_prim=0, middle=0x7c6d1f58, opt=0x7) [/home/lordh/tst/lib32-mesa-git/src/build/src/gallium/auxiliary/draw/draw_pt_vsplit.c:175] in r600_dri.so (0x00000000)
err:ntdll:RtlpWaitForCriticalSection section 0x7dec72a0 "../../../wine/dlls/winex11.drv/x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0009, blocked by 0022, retrying (60 sec)
Comment 6 Henri Verbeet 2012-02-29 14:43:48 UTC
Although the backtrace is different, I think there are some similarities with https://bugs.freedesktop.org/show_bug.cgi?id=41791.
Comment 7 Johannes Obermayr 2012-03-01 15:20:14 UTC
Created attachment 57881 [details]
valgrind log on current git/svn versions

Here is a valgrind log using current git/svn version
Comment 8 Jose Fonseca 2012-05-16 08:13:04 UTC
Created attachment 61718 [details] [review]
patch w/ workaround attempt
Comment 9 Jose Fonseca 2012-05-16 08:13:28 UTC
Please re-try with latest master which includes

commit 9af1ba565dfd5cef9ee938bb7c04767d14878fbf
Author: José Fonseca <jfonseca@vmware.com>
Date:   Wed May 16 15:00:23 2012 +0100

    draw,llvmpipe: Avoid named struct types on LLVM 3.0 and later.

    Starting with LLVM 3.0, named structures are meant not for debugging, but
    for recursive data types, previously also known as opaque types.

    The recursive nature of these types leads to several memory management
    difficulties.  Given that we don't actually need recursive types, avoid
    them altogether.

    This is an attempt to address fdo bugs 41791 and 44466. The issue is
    somewhat random so there's no easy way to check how effective this is.


And if that doesn't work, try the attached path w/ another workaround attempt.
Comment 10 Laurent carlier 2012-05-17 00:09:30 UTC
No changes with mesa trunk:

...
err:x11settings:X11DRV_ChangeDisplaySettingsEx No matching mode found 1920x1080x32 @3330900! (XRandR)
fixme:win:EnumDisplayDevicesW ((null),0,0xf0e294,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3cc): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
draw/draw_llvm.c:161:create_jit_texture_type: Assertion `LLVMOffsetOfElement(target, texture_type, DRAW_JIT_TEXTURE_DATA) == __builtin_offsetof (struct draw_jit_texture, data)' failed.
wine: Unhandled exception 0x80000003 at address 0x7a8fabba (thread 0035), starting debugger...
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
...

glxinfo32:
OpenGL renderer string: Gallium 0.4 on AMD RV770
OpenGL version string: 2.1 Mesa 8.1-devel (git-d65bd19)
OpenGL shading language version string: 1.30


Now i will test with the provided patch....
Comment 11 Laurent carlier 2012-05-17 00:44:18 UTC
(In reply to comment #8)
> Created attachment 61718 [details] [review] [review]
> patch w/ workaround attempt

No luck with this patch also (same error)
Comment 12 Jose Fonseca 2012-05-17 02:17:12 UTC
(In reply to comment #11)
> (In reply to comment #8)
> > Created attachment 61718 [details] [review] [review] [review]
> > patch w/ workaround attempt
> 
> No luck with this patch also (same error)

Thanks Laurent.  I think there might be a different issue than I reproduced.

Please apply this change, and provide the output:

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 4058e11..cb7c447 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -135,6 +135,11 @@ create_jit_texture_type(struct gallivm_state *gallivm, const char *struct_name)
    LLVMInvalidateStructLayout(gallivm->target, texture_type);
 #endif
 
+
+#undef LP_CHECK_MEMBER_OFFSET
+#define LP_CHECK_MEMBER_OFFSET(_ctype, _cmember, _ltarget, _ltype, _lindex) \
+      debug_printf("offset: %s, llvm = %u, cc = %u\n", #_ctype "." #_cmember, (unsigned)LLVMOffsetOfElement(_ltarget, _ltype, _lindex
+
    LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, width,
                           target, texture_type,
                           DRAW_JIT_TEXTURE_WIDTH);
Comment 13 Laurent carlier 2012-05-17 06:09:05 UTC
(In reply to comment #12)
> (In reply to comment #11)
> > (In reply to comment #8)
> > > Created attachment 61718 [details] [review] [review] [review] [review]
> > > patch w/ workaround attempt
> > 
> > No luck with this patch also (same error)
> 
> Thanks Laurent.  I think there might be a different issue than I reproduced.
> 
> Please apply this change, and provide the output:
> 
> diff --git a/src/gallium/auxiliary/draw/draw_llvm.c
> b/src/gallium/auxiliary/draw/draw_llvm.c
> index 4058e11..cb7c447 100644
> --- a/src/gallium/auxiliary/draw/draw_llvm.c
> +++ b/src/gallium/auxiliary/draw/draw_llvm.c
> @@ -135,6 +135,11 @@ create_jit_texture_type(struct gallivm_state *gallivm,
> const char *struct_name)
>     LLVMInvalidateStructLayout(gallivm->target, texture_type);
>  #endif
> 
> +
> +#undef LP_CHECK_MEMBER_OFFSET
> +#define LP_CHECK_MEMBER_OFFSET(_ctype, _cmember, _ltarget, _ltype, _lindex) \
> +      debug_printf("offset: %s, llvm = %u, cc = %u\n", #_ctype "." #_cmember,
> (unsigned)LLVMOffsetOfElement(_ltarget, _ltype, _lindex
> +
>     LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, width,
>                            target, texture_type,
>                            DRAW_JIT_TEXTURE_WIDTH);

Sorry, but your patch is broken, it doesn't build with it applied
Comment 14 Jose Fonseca 2012-05-17 08:07:22 UTC
Created attachment 61748 [details] [review]
patch to log offsets to stderr

Bugzilla munged my patch. Laurent please try the patch attached.
Comment 15 Laurent carlier 2012-05-17 08:53:10 UTC
(In reply to comment #14)
> Created attachment 61748 [details] [review] [review]
> patch to log offsets to stderr
> 
> Bugzilla munged my patch. Laurent please try the patch attached.

Here is the output:
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x704): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
offset: struct vertex_header.clip, llvm = 4, cc = 4
offset: struct vertex_header.pre_clip_pos, llvm = 20, cc = 20
offset: struct vertex_header.data, llvm = 36, cc = 36
offset: struct draw_jit_texture.width, llvm = 0, cc = 0
offset: struct draw_jit_texture.height, llvm = 4, cc = 4
offset: struct draw_jit_texture.depth, llvm = 8, cc = 8
offset: struct draw_jit_texture.first_level, llvm = 12, cc = 12
offset: struct draw_jit_texture.last_level, llvm = 16, cc = 16
offset: struct draw_jit_texture.row_stride, llvm = 20, cc = 20
offset: struct draw_jit_texture.img_stride, llvm = 84, cc = 84
offset: struct draw_jit_texture.data, llvm = 152, cc = 148
offset: struct draw_jit_texture.min_lod, llvm = 280, cc = 212
offset: struct draw_jit_texture.max_lod, llvm = 284, cc = 216
offset: struct draw_jit_texture.lod_bias, llvm = 288, cc = 220
offset: struct draw_jit_texture.border_color, llvm = 292, cc = 224
draw/draw_llvm.c:182:create_jit_texture_type: Assertion `LLVMABISizeOfType(target, texture_type) == sizeof(struct draw_jit_texture)' failed.
wine: Unhandled exception 0x80000003 at address 0x7a8fabba (thread 0022), starting debugger...
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
Comment 16 Jose Fonseca 2012-05-17 15:39:05 UTC
Created attachment 61766 [details] [review]
patch to dump the target data layout

I suspect that when llvm is built with clang it picks up a different target data layout.

Laurent, I'm attaching a patch to dump the target data layout reported by LLVM, to see in what way it differs. Please try when you have a chance.
Comment 17 Laurent carlier 2012-05-18 09:34:59 UTC
(In reply to comment #16)
> Created attachment 61766 [details] [review] [review]
> patch to dump the target data layout
> 
> I suspect that when llvm is built with clang it picks up a different target
> data layout.
> 
> Laurent, I'm attaching a patch to dump the target data layout reported by LLVM,
> to see in what way it differs. Please try when you have a chance.

Here with the last patch also applied:
[lordh@archMain FurMark_1.9.2]$ wine FurMark.exe 
data_layout = e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-f128:128:128-n8:16:32:64
fixme:heap:HeapSetInformation (nil) 1 (nil) 0
fixme:win:EnumDisplayDevicesW ((null),0,0x32eaf8,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3b0): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0x32e4cc,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),1,0x32e4cc,0x00000000), stub!
fixme:win:EnumDisplayDevicesW ((null),0,0x32eca0,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x3cc): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
fixme:win:EnumDisplayDevicesW ((null),0,0xf0e294,0x00000000), stub!
err:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x768): unexpected iPixelFormat(0) vs nFormats(175), returns FALSE
Mesa: User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAX_GEOMETRY_UNIFORM_COMPONENTS)
offset: struct vertex_header.clip, llvm = 4, cc = 4
offset: struct vertex_header.pre_clip_pos, llvm = 20, cc = 20
offset: struct vertex_header.data, llvm = 36, cc = 36
offset: struct draw_jit_texture.width, llvm = 0, cc = 0
offset: struct draw_jit_texture.height, llvm = 4, cc = 4
offset: struct draw_jit_texture.depth, llvm = 8, cc = 8
offset: struct draw_jit_texture.first_level, llvm = 12, cc = 12
offset: struct draw_jit_texture.last_level, llvm = 16, cc = 16
offset: struct draw_jit_texture.row_stride, llvm = 20, cc = 20
offset: struct draw_jit_texture.img_stride, llvm = 84, cc = 84
offset: struct draw_jit_texture.data, llvm = 152, cc = 148
offset: struct draw_jit_texture.min_lod, llvm = 280, cc = 212
offset: struct draw_jit_texture.max_lod, llvm = 284, cc = 216
offset: struct draw_jit_texture.lod_bias, llvm = 288, cc = 220
offset: struct draw_jit_texture.border_color, llvm = 292, cc = 224
draw/draw_llvm.c:182:create_jit_texture_type: Assertion `LLVMABISizeOfType(target, texture_type) == sizeof(struct draw_jit_texture)' failed.
wine: Unhandled exception 0x80000003 at address 0x7cc09f2a (thread 0022), starting debugger...
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
fixme:dbghelp_dwarf:dwarf2_lookup_type Unable to load forward reference for tag 1f
Comment 18 Jose Fonseca 2012-05-19 04:20:08 UTC
(In reply to comment #17)
> e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-f128:128:128-n8:16:32:64

I get

  e-p:32:32:32-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f16:16:16-f32:32:32-f64:32:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32

"p:64:64:64" signifies 64bit pointers, per  http://llvm.org/docs/LangRef.html#datalayout

So clang compiled execution engine is busted -- it somehow thinks it is on 64bits mode, instead of 32bits mode

AFAICT, the jit engine choose 64bits vs 32bits based on the target triple, which is returned by llvm::sys::etDefaultTargetTriple/getHostTriple() functions, which is returned by LLVM_DEFAULT_TARGET_TRIPLE.

My guess is that LLVM is built using clang LLVM_DEFAULT_TARGET_TRIPLE is not being defined properly (when cross compiled on 64bits, or something like that).

You need to follow up on this bug with your distro or LLVM.
Comment 19 Jose Fonseca 2012-05-19 04:21:49 UTC
Created attachment 61837 [details] [review]
patch to dump the default target triple

This is a patch to dump the default target triple.

This is what I get when running furmark in wine:

  Triple = i386-pc-linux-gnu
Comment 20 Jose Fonseca 2012-05-19 04:23:23 UTC
*** Bug 41791 has been marked as a duplicate of this bug. ***
Comment 21 Laurent carlier 2012-05-19 14:42:43 UTC
(In reply to comment #19)
> Created attachment 61837 [details] [review] [review]
> patch to dump the default target triple
> 
> This is a patch to dump the default target triple.
> 
> This is what I get when running furmark in wine:
> 
>   Triple = i386-pc-linux-gnu

indeed:
Triple = x86_64-unknown-linux-gnu
Comment 22 Laurent carlier 2012-05-19 14:43:23 UTC
-> Closing
Comment 23 Jose Fonseca 2012-05-19 15:09:44 UTC
(In reply to comment #21)
> indeed:
> Triple = x86_64-unknown-linux-gnu

Thanks for confirming, Laurent, and thanks for diligently providing all info.
Comment 24 Laurent carlier 2012-05-19 15:29:09 UTC
Oh! and thanks for your help for tracking this bug!

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.