unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Ken Brown <kbrown@cornell.edu>
Cc: 18438@debbugs.gnu.org, aidalgol@amuri.net
Subject: bug#18438: 24.4.50; assertion failed in bidi.c
Date: Sat, 11 Oct 2014 10:11:18 +0300	[thread overview]
Message-ID: <831tqf9j3d.fsf@gnu.org> (raw)
In-Reply-To: <54388E84.7020403@cornell.edu>

> Date: Fri, 10 Oct 2014 21:57:24 -0400
> From: Ken Brown <kbrown@cornell.edu>
> CC: aidalgol@amuri.net, 18438@debbugs.gnu.org
> 
> On 10/10/2014 11:12 AM, Eli Zaretskii wrote:
> > Something vague about the upper 32 bits of the 64-bit registers.
> > (Yes, I'm desperate.)
> 
> I'm desperate too.  Here's another thought: Suppose this really is a 
> thread-safety issue in some way that we don't understand.  Then maybe 
> the problem is that the test 'type <= 23' is not atomic in the 
> compilation that Aidan and I have been doing.  First 'type' is copied 
> from ECX to RBP+0x10, then the latter is tested.

That's true; but note that the value at RBP+0x10 is the one passed to
fprintf (by pushing it on the stack via EDX), and it printed correctly.

> We could make it 
> atomic by forcing GCC to directly test ECX <= 23.  We can do this by 
> compiling with -Og instead of -O0. (Aidan and I have both been using -O0.)
> 
> The resulting disassembly (based on your earlier patch, in 
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18438#103) is
> 
> Dump of assembler code for function bidi_check_type:
>     0x00000001004ee9db <+0>:     push   %rbx
>     0x00000001004ee9dc <+1>:     sub    $0x40,%rsp
>     0x00000001004ee9e0 <+5>:     mov    %ecx,%ebx
>     0x00000001004ee9e2 <+7>:     mov    0x543027(%rip),%rax        # 
> 0x100a31a10 <.refptr.suppress_checking>
>     0x00000001004ee9e9 <+14>:    cmpb   $0x0,(%rax)
>     0x00000001004ee9ec <+17>:    jne    0x1004eea2f <bidi_check_type+84>
>     0x00000001004ee9ee <+19>:    cmp    $0x17,%ecx
>     0x00000001004ee9f1 <+22>:    jbe    0x1004eea2f <bidi_check_type+84>
>     0x00000001004ee9f3 <+24>:    callq  0x10069fd40 <__getreent>
>     0x00000001004ee9f8 <+29>:    mov    0x18(%rax),%rcx
>     0x00000001004ee9fc <+33>:    movl   $0x17,0x30(%rsp)
>     0x00000001004eea04 <+41>:    movl   $0x0,0x28(%rsp)
>     0x00000001004eea0c <+49>:    mov    %ebx,0x20(%rsp)
>     0x00000001004eea10 <+53>:    mov    $0x14c,%r9d
>     0x00000001004eea16 <+59>:    lea    0x51e713(%rip),%r8        # 
> 0x100a0d130 <chartab_size+112>
>     0x00000001004eea1d <+66>:    lea    0x51e814(%rip),%rdx        # 
> 0x100a0d238 <chartab_size+376>
>     0x00000001004eea24 <+73>:    callq  0x1006a0040 <fprintf>
>     0x00000001004eea29 <+78>:    callq  0x10065227d <emacs_abort>
>     0x00000001004eea2e <+83>:    nop
>     0x00000001004eea2f <+84>:    add    $0x40,%rsp
>     0x00000001004eea33 <+88>:    pop    %rbx
>     0x00000001004eea34 <+89>:    retq
> End of assembler dump.
> 
> Do you think this is worth trying (perhaps after Aidan tries your other 
> suggestion, involving 64-bit registers)?

Holding a value in a register AFAIU actually makes the probability of
a clobber by another thread higher than keeping it on the stack.

But I think any idea is worth trying at this time, certainly including
yours.  Thanks.

Btw, note that the above version copies the argument into EBX, which
is then pushed onto the stack (10 instructions later) before calling
fprintf.  This is somewhat different from the original code, which
held the value in a temporary variable on the stack instead of in EBX.
Not sure this matters, just mentioning it for the record.





  reply	other threads:[~2014-10-11  7:11 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-09 21:41 bug#18438: 24.4.50; assertion failed in bidi.c aidalgol
2014-09-10  0:16 ` Stefan Monnier
2014-09-10 18:55   ` Aidan Gauland
2014-09-10 19:09     ` Eli Zaretskii
2014-09-11  4:31       ` aidalgol
2014-09-11 13:18         ` Ken Brown
2014-09-12  1:51           ` aidalgol
2014-09-12  1:55       ` aidalgol
2014-09-12  6:00         ` Eli Zaretskii
2014-09-12  7:46           ` Eli Zaretskii
2014-09-16  1:04             ` aidalgol
2014-09-16  2:47               ` Eli Zaretskii
2014-09-16  2:59                 ` aidalgol
2014-09-16 14:33                   ` Eli Zaretskii
2014-09-16 22:42                     ` aidalgol
2014-09-17  5:07                       ` Eli Zaretskii
2014-09-18  4:55                         ` aidalgol
2014-09-18  4:59                         ` aidalgol
2014-09-18 14:42                           ` Eli Zaretskii
2014-09-21 22:30                             ` Ken Brown
2014-09-24  5:07                               ` aidalgol
2014-09-24 14:06                                 ` Ken Brown
2014-09-24 15:01                                   ` Eli Zaretskii
2014-09-24 16:40                                     ` Ken Brown
2014-09-24 19:49                                       ` Eli Zaretskii
2014-09-28 23:03                                   ` aidalgol
2014-09-10 13:14 ` Ken Brown
2014-09-29  0:56 ` aidalgol
2014-09-29  6:23   ` Eli Zaretskii
2014-09-29 15:50     ` Ken Brown
2014-09-29 17:00       ` Eli Zaretskii
2014-09-29 22:28         ` aidalgol
2014-09-30 15:24           ` Eli Zaretskii
2014-09-30 16:09             ` Ken Brown
2014-09-30 16:27               ` Eli Zaretskii
2014-09-30 23:06                 ` aidalgol
2014-10-01  2:39                   ` Eli Zaretskii
2014-10-01  2:58                     ` aidalgol
2014-10-01 14:42                       ` Eli Zaretskii
2014-10-01 21:56                         ` aidalgol
2014-10-01  2:40                   ` Ken Brown
2014-10-08 22:20             ` aidalgol
2014-10-09  7:29               ` Eli Zaretskii
2014-10-10  2:21                 ` aidalgol
2014-10-10  7:19                   ` Eli Zaretskii
2014-10-10  7:26                     ` Eli Zaretskii
2014-10-10 13:54                     ` Ken Brown
2014-10-10 15:12                       ` Eli Zaretskii
2014-10-10 17:14                         ` Ken Brown
2014-10-11  1:57                         ` Ken Brown
2014-10-11  7:11                           ` Eli Zaretskii [this message]
2014-10-11 13:58                             ` Ken Brown
2014-10-11 14:24                               ` Eli Zaretskii
2014-10-11 16:33                                 ` Ken Brown
2014-10-11 16:52                                   ` Eli Zaretskii
2014-10-11 17:17                                     ` Ken Brown
2014-10-15  0:58                     ` aidalgol
2014-10-15  5:13                       ` Eli Zaretskii
2014-10-15 19:29                         ` aidalgol
2014-10-16  7:27                           ` Eli Zaretskii
2014-10-16 13:11                             ` Ken Brown
2014-10-16 13:38                               ` Eli Zaretskii
2014-10-19 14:39                               ` Eli Zaretskii
2014-10-19 15:37                                 ` Ken Brown
2014-10-19 18:10                                   ` Eli Zaretskii
2014-10-19 19:49                                   ` aidalgol
2014-10-19 20:20                                 ` aidalgol
2014-10-20 15:46                                   ` Eli Zaretskii
2014-10-20 16:51                                     ` Eli Zaretskii
2014-10-20 19:35                                       ` Ivan Shmakov
2014-10-20 19:39                                         ` Eli Zaretskii
2014-10-20 20:02                                           ` Ivan Shmakov
2014-10-20 20:59                                       ` Ken Brown
2014-10-21 15:42                                         ` Eli Zaretskii
2014-10-21 16:18                                           ` Ken Brown
2014-10-21 19:38                                         ` aidalgol
2014-10-21 21:12                                           ` Ken Brown
2014-10-21 21:58                                             ` aidalgol
2014-10-21 22:21                                               ` Ken Brown
2014-10-21 22:38                                                 ` aidalgol
2014-10-22  4:16 ` aidalgol
2014-10-22 15:24   ` Eli Zaretskii
2014-10-22 17:16   ` Eli Zaretskii
2014-10-22 20:39     ` Ken Brown
2014-10-23 20:38       ` aidalgol
2014-10-23 21:54       ` aidalgol
2014-10-24  6:50         ` Eli Zaretskii
2014-10-24 19:18           ` Ken Brown
2014-10-24 21:19             ` Ken Brown
2014-10-29  4:30               ` aidalgol
2014-10-29 12:15                 ` Ken Brown
2014-10-29 14:37                   ` Eli Zaretskii
2015-12-26 15:37                   ` bug#17817: " Lars Ingebrigtsen
2015-12-26 15:43                     ` Ken Brown
2014-10-29 14:17                 ` Eli Zaretskii
2014-10-23  4:15     ` aidalgol

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=831tqf9j3d.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=18438@debbugs.gnu.org \
    --cc=aidalgol@amuri.net \
    --cc=kbrown@cornell.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).