Hi, I'm starting to investigate mesa/llvmpipe on powerpc (powerpc64/power7) and hitting some issues trying to run the tests found in mesa/src/gallium/drivers/llvmpipe/lp_test_*. (lp_test_arit, lp_test_printf, lp_test_blend all seem to fail in similar fashion. lp_test_round passes, but does not provide any output, so I'm not sure it's actually doing anything. )
I'll note that I'm still ramping up on my understanding of all the parts, don't quite know what I'm doing yet, and will not be surprised if this involves user error. pointers and tips on what I should tweak/poke/kick next are appreciated. :-) Configure and build are on a fedora 17 based power7 box, using mesa .git HEAD as of today. [willschm@fuzzy mesa]$ ./autogen.sh --enable-gallium-llvm < build steps trimmed > [willschm@fuzzy mesa]$ cd src/gallium/drivers/llvmpipe [willschm@fuzzy llvmpipe]$ ./lp_test_printf Segmentation fault [willschm@fuzzy llvmpipe]$ file ./lp_test_printf ./lp_test_printf: ELF 64-bit MSB executable, 64-bit PowerPC or cisco 7500, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xb372fe4bb8536c54a3ac70df31537516ec7b8d2d, not stripped build incantation for lp_test_printf looks like so: g++ -L/usr/lib64/llvm -lpthread -lffi -ldl -lm lp_test_printf.o lp_test_main.o -o lp_test_printf -Wl,--start-group -L../../auxiliary/ -lgallium libllvmpipe.a -lLLVMBitWriter -lLLVMPowerPCCodeGen -lLLVMSelectionDAG -lLLVMPowerPCDesc -lLLVMAsmPrinter -lLLVMMCParser -lLLVMPowerPCAsmPrinter -lLLVMPowerPCInfo -lLLVMJIT -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMCore -lLLVMSupport -lXext -lXdamage -lXfixes -lX11-xcb -lX11 -lxcb-glx -lxcb -lXxf86vm -ldrm -lm -lpthread -ldl -Wl,--end-group A bit of time inside gdb: Reading symbols from /home/willschm/llvm/mesa/src/gallium/drivers/llvmpipe/lp_test_printf...done. (gdb) r Starting program: /home/willschm/llvm/mesa/src/gallium/drivers/llvmpipe/lp_test_printf [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0x7c0802a6f8010010 in ?? () (gdb) bt #0 0x7c0802a6f8010010 in ?? () #1 0x000000001001df40 in test_printf (gallivm=0x10a11e80, testcase=<error reading variable: Unhandled dwarf expression opcode 0xfa>, fp=<error reading variable: Unhandled dwarf expression opcode 0xfa>, verbose=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at lp_test_printf.c:112 #2 0x000000001001e040 in test_all (fp=<optimized out>, verbose=<optimized out>, gallivm=<optimized out>) at lp_test_printf.c:125 #3 test_some (gallivm=<optimized out>, verbose=<optimized out>, fp=<optimized out>, n=<optimized out>) at lp_test_printf.c:135 #4 0x00000000100150e0 in main (argc=1, argv=<optimized out>) at lp_test_main.c:401 Some single-step debug near the point of SIGSEGV suggests that we are reading a bad pointer value off of $r3 and hit the segv on the btctr. Breakpoint 1, test_printf (gallivm=0x10a11e80, testcase=<error reading variable: Unhandled dwarf expression opcode 0xfa>, fp=<error reading variable: Unhandled dwarf expression opcode 0xfa>, verbose=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at lp_test_printf.c:112 112 test_printf_func(0); 0x000000001001df20 <test_printf+432>: e9 43 00 00 ld r10,0(r3) => 0x000000001001df24 <test_printf+436>: f8 41 00 28 std r2,40(r1) (gdb) info reg r3 r3 0xfffb7f60010 17590977429520 (gdb) info reg r10 r10 0x7c0802a6f8010010 8937396376665391120 0x000000001001df28 <test_printf+440>: 7c 69 1b 78 mr r9,r3 0x000000001001df2c <test_printf+444>: 38 60 00 00 li r3,0 0x000000001001df30 <test_printf+448>: 7d 49 03 a6 mtctr r10 0x000000001001df34 <test_printf+452>: e9 69 00 10 ld r11,16(r9) 0x000000001001df38 <test_printf+456>: e8 49 00 08 ld r2,8(r9) => 0x000000001001df3c <test_printf+460>: 4e 80 04 21 bctrl C code for that chunk should match this; so seems like something went wrong handling the return from LLVMGetPointerToGlobal. (32/64-bit ism?) > code = LLVMGetPointerToGlobal(engine, test); > test_printf_func = (test_printf_t) pointer_to_func(code); > > // LLVMDumpModule(module); > > test_printf_func(0); Thanks, -Will _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev