[haiku-commits] haiku: hrev52456 - src/system/kernel/lib/arch/x86

  • From: waddlesplash@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 29 Oct 2018 22:47:11 -0400 (EDT)

hrev52456 adds 1 changeset to branch 'master'
old head: 725773552910a032b97df28f77b2ee6910c8a34d
new head: d1f8f8301cf0273f0f88abb613712044c6e7194b
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=d1f8f8301cf0+%5E725773552910

----------------------------------------------------------------------------

d1f8f8301cf0: kernel: Tolerate "count" argument to memcpy being 0.
  
  It seems GCC2 occasionally will inline a call to memcpy with
  a count of 0, which this function did not previously expect
  and would result in a "Divide Error Exception."
  
  Hopefully fixes #14613.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev52456
Commit:      d1f8f8301cf0273f0f88abb613712044c6e7194b
URL:         https://git.haiku-os.org/haiku/commit/?id=d1f8f8301cf0
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Tue Oct 30 02:44:01 2018 UTC

Ticket:      https://dev.haiku-os.org/ticket/14613

----------------------------------------------------------------------------

1 file changed, 9 insertions(+), 1 deletion(-)
src/system/kernel/lib/arch/x86/arch_string.S | 10 +++++++++-

----------------------------------------------------------------------------

diff --git a/src/system/kernel/lib/arch/x86/arch_string.S 
b/src/system/kernel/lib/arch/x86/arch_string.S
index 7a3480b2c5..a5fe6b51ce 100644
--- a/src/system/kernel/lib/arch/x86/arch_string.S
+++ b/src/system/kernel/lib/arch/x86/arch_string.S
@@ -1,10 +1,11 @@
 /*
  * Copyright 2008, Ingo Weinhold, ingo_weinhold@xxxxxx.
+ * Copyright 2018, Haiku, Inc. All rights reserved.
  * Distributed under the terms of the MIT License.
  *
  * Copyright 2001, Travis Geiselbrecht. All rights reserved.
  * Distributed under the terms of the NewOS License.
-*/
+ */
 
 
 #include <asm_defs.h>
@@ -19,6 +20,12 @@ FUNCTION(memcpy):
        movl    16(%esp),%esi   /* source */
        movl    20(%esp),%ecx   /* count */
 
+       /* (count == 0 || dest == src) -> quick way out */
+       testl   %ecx, %ecx
+       je              .tail
+       cmpl    %edi, %esi
+       je              .tail
+
        /* move by words */
        // TODO: The addresses might not be aligned!
        cld
@@ -32,6 +39,7 @@ FUNCTION(memcpy):
        rep
        movsb
 
+.tail:
        popl    %edi
        popl    %esi
        ret


Other related posts:

  • » [haiku-commits] haiku: hrev52456 - src/system/kernel/lib/arch/x86 - waddlesplash