https://bugs.kde.org/show_bug.cgi?id=377006
--- Comment #9 from John Reiser <jrei...@bitwagon.com> --- It looks to me like some part of the problem arises when memcheck is working on the driver for the video graphics card. This suggests a cause for non-determinism, and also a reason for different behavior on different Linux kernels. At various times over the last few years, different parts of the driver have moved between kernel space and user space. So one strategy to avoid SIGSEGV might be to choose a video driver that is as simple as possible; probably this is "VGA framebuffer" (which does exist, but I don't know its actual name.) Another source of non-determinism is the use of threads. I usually see two threads. One of them gets the SIGSEGV, then the other terminates "normally". I ran this group of sessions on : Linux deb81p64 4.9.0-1-amd64 #1 SMP Debian 4.9.6-3 (2017-01-28) x86_64 GNU/Linux 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208 [GeForce GT 710B] [10de:128b] (rev a1) libdrm-nouveau2:amd64 2.4.74-1 Gnome 1:3.20+3 desktop environment Thunderbird is icedove-45.7.1 re-built from source in the usual Debian way. THUNDERBIRD_BIN=icedove-45.7.1/obj-thunderbird/dist/bin/thunderbird-bin After building valgrind from current SVN, I modified vg-in-place so that the last command is strace -i -e signal=SIGSEGV -e trace=file,memory "$vgbasedir/coregrind/valgrind" --run-libc-freeres=no --trace-flags=10000000 --trace-notbelow=22081 --trace-syscalls=yes $THUNDERBIRD_BIN >foo 2>&1 and then experimented with --trace-notbelow until I got close to just before the killing SIGSEGV. [The number of basic blocks varied from run to run, which I attribute to non-determinism.] The last two basic blocks are below. You can see the SIGSEGV in the middle of the last block. I saw the SIGSEGV on every run, usually in about 20 seconds of real time on Intel Core 2 Duo @ 3GHz. ===== GuestBytes 1B5BF56B 22 48 8D 3D 1E 33 FF FF 48 89 3C D3 48 63 90 74 02 00 00 85 D2 78 0B 00A1B31B VexExpansionRatio 22 363 165 :10 ==== SB 23786 (evchecks 13409019) [tid 1] 0x1b5bf581 UNKNOWN_FUNCTION /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so+0xa9581 ------------------------ Front end ------------------------ 0x1B5BF581: leaq -52824(%rip), %rcx ------ IMark(0x1B5BF581, 7, 0) ------ t0 = Add64(0x1B5BF588:I64,0xFFFFFFFFFFFF31A8:I64) PUT(24) = t0 PUT(184) = 0x1B5BF588:I64 0x1B5BF588: movq %rcx,(%rbx,%rdx,8) ------ IMark(0x1B5BF588, 4, 0) ------ t1 = Add64(GET:I64(40),Shl64(GET:I64(32),0x3:I8)) STle(t1) = GET:I64(24) PUT(184) = 0x1B5BF58C:I64 0x1B5BF58C: movslq 640(%rax),%rdx ------ IMark(0x1B5BF58C, 7, 0) ------ t2 = Add64(GET:I64(16),0x280:I64) PUT(32) = 32Sto64(LDle:I32(t2)) PUT(184) = 0x1B5BF593:I64 0x1B5BF593: testl %edx,%edx ------ IMark(0x1B5BF593, 2, 0) ------ t5 = 64to32(GET:I64(32)) t4 = 64to32(GET:I64(32)) t3 = And32(t5,t4) PUT(144) = 0x13:I64 PUT(152) = 32Uto64(t3) PUT(160) = 0x0:I64 PUT(184) = 0x1B5BF595:I64 0x1B5BF595: js-8 0x1B5BF5A2 ------ IMark(0x1B5BF595, 2, 0) ------ if (64to1(amd64g_calculate_condition[mcx=0x13]{0x3817bec0}(0x8:I64,GET:I64(144),GET:I64(152),GET:I64(160),GET:I64(168)):I64)) { PUT(184) = 0x1B5BF5A2:I64; exit-Boring } PUT(184) = 0x1B5BF597:I64 PUT(184) = GET:I64(184); exit-Boring GuestBytes 1B5BF581 22 48 8D 0D A8 31 FF FF 48 89 0C D3 48 63 90 80 02 00 00 85 D2 78 0B 03FEC91B VexExpansionRatio 22 363 165 :10 ==== SB 23787 (evchecks 13409020) [tid 1] 0x1b5bf597 UNKNOWN_FUNCTION /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so+0xa9597 ------------------------ Front end ------------------------ 0x1B5BF597: leaq -53198(%rip), %rsi ------ IMark(0x1B5BF597, 7, 0) ------ t0 = Add64(0x1B5BF59E:I64,0xFFFFFFFFFFFF3032:I64) PUT(64) = t0 PUT(184) = 0x1B5BF59E:I64 0x1B5BF59E: movq %rsi,(%rbx,%rdx,8) ------ IMark(0x1B5BF59E, 4, 0) ------ t1 = Add64(GET:I64(40),Shl64(GET:I64(32),0x3:I8)) STle(t1) = GET:I64(64) PUT(184) = 0x1B5BF5A2:I64 0x1B5BF5A2: movslq 636(%rax),%rdx ------ IMark(0x1B5BF5A2, 7, 0) ------ t2[????????????????] +++ killed by SIGSEGV +++ = Add64(GET:I64(16),0x27C:I64) PUT(32) = 32Sto64(LDle:I32(t2)) PUT(184) = 0x1B5BF5A9:I64 0x1B5BF5A9: testl %edx,%edx ------ IMark(0x1B5BF5A9, 2, 0) ------ t5 = 64to32(Segmentation fault GET:I64(32)) t4 = 64to32(GET:I64(32)) t3 = And32(t5,t4) PUT(144) = 0x13:I64 PUT(152) = 32Uto64(t3) PUT(160) = 0x0:I64 PUT(184) = 0x1B5BF5AB:I64 0x1B5BF5AB: js-8 0x1B5BF5B8 ===== $ gdb /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so (gdb) x/12i 0xa9597 0xa9597: lea -0xcfce(%rip),%rsi # 0x9c5d0 0xa959e: mov %rsi,(%rbx,%rdx,8) 0xa95a2: movslq 0x27c(%rax),%rdx 0xa95a9: test %edx,%edx 0xa95ab: js 0xa95b8 0xa95ad: lea -0xd144(%rip),%rdi # 0x9c470 0xa95b4: mov %rdi,(%rbx,%rdx,8) 0xa95b8: movslq 0x284(%rax),%rdx 0xa95bf: test %edx,%edx 0xa95c1: js 0xa95ce 0xa95c3: lea -0xd2ba(%rip),%rcx # 0x9c310 0xa95ca: mov %rcx,(%rbx,%rdx,8) (gdb) x/12i 0xa9597-0x20 0xa9577: movslq 0x274(%rax),%edx 0xa957d: test %edx,%edx 0xa957f: js 0xa958c 0xa9581: lea -0xce58(%rip),%rcx # 0x9c730 0xa9588: mov %rcx,(%rbx,%rdx,8) 0xa958c: movslq 0x280(%rax),%rdx 0xa9593: test %edx,%edx 0xa9595: js 0xa95a2 0xa9597: lea -0xcfce(%rip),%rsi # 0x9c5d0 0xa959e: mov %rsi,(%rbx,%rdx,8) 0xa95a2: movslq 0x27c(%rax),%rdx 0xa95a9: test %edx,%edx ===== -- You are receiving this mail because: You are watching all bug changes.