Memmove causing program crashes, giving SIGTRAP in GDB(?)

Dimitry Andric dimitry@unified-streaming.com
Thu Feb 26 21:42:28 GMT 2026


If such a crash occurs, can you do a "thread apply all bt" in gdb? This will show what all the other threads are doing. I'm betting some other thread is calling memcpy or some other function that is messing with the direction flag.

-Dimitry

> On 26 Feb 2026, at 21:47, KENNON J CONRAD <kennonconrad@comcast.net> wrote:
> 
> Yes, lots.  7 threads were running at the point of the crash  87% load on my i7-4790k.  I did a little research since the last post.  The memmove code where the crash occurs is:
> 
>   0x00007ff96ba812a8 <+136>: std
> => 0x00007ff96ba812a9 <+137>: rep movsq %ds:(%rsi),%es:(%rdi)
>   0x00007ff96ba812ac <+140>: cld
> 
> This sets the direction flag immediately before the rep movsq and clears the direction flag immediately after the rep movsq.  Yet when gdb breaks it shows the direction flag is not set:
> 
> eflags         0x246               [ PF ZF IF ]
> 
>  Would a forward move on overlapping data cause the SIGTRAP?  Could the code have moved to a different core?  Or could it have been interrupted by some other task that corrupts the flag?  As I mentioned earlier, the rep movsq is only failing once per several million times memmove is called so it seems likely to be something along those lines.
> 
> -Kennon
> 
> 
>> On 02/26/2026 12:20 PM PST Dimitry Andric <dimitry@unified-streaming.com> wrote:
>> 
>> 
>> Is there some concurrency going on? Maybe some other part of the program is flipping the direction flag?
>> 
>> -Dimitry
>> 



More information about the Cygwin mailing list