Sebastian Lackner : ntdll: Do not cast unaligned pointer to M128A in set_context_reg.

Alexandre Julliard julliard at winehq.org
Thu Jul 20 12:11:29 CDT 2017


Module: wine
Branch: stable
Commit: 86b4c74aa63bce8824c64326f79b0b3f498c6c78
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=86b4c74aa63bce8824c64326f79b0b3f498c6c78

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Mon Jun  5 14:50:48 2017 +0200

ntdll: Do not cast unaligned pointer to M128A in set_context_reg.

GCC 7.x will assume 'val' is properly aligned when using a cast.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit d2ec61105d47543ae5bddf393d384b5165795ab5)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/ntdll/signal_x86_64.c | 48 +++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index f33fe4c..6bd51ea 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -1154,30 +1154,30 @@ static void set_context_reg( CONTEXT *context, ULONG_PTR dw_reg, void *val )
     case 14: context->R14 = *(ULONG64 *)val; break;
     case 15: context->R15 = *(ULONG64 *)val; break;
     case 16: context->Rip = *(ULONG64 *)val; break;
-    case 17: context->u.s.Xmm0  = *(M128A *)val; break;
-    case 18: context->u.s.Xmm1  = *(M128A *)val; break;
-    case 19: context->u.s.Xmm2  = *(M128A *)val; break;
-    case 20: context->u.s.Xmm3  = *(M128A *)val; break;
-    case 21: context->u.s.Xmm4  = *(M128A *)val; break;
-    case 22: context->u.s.Xmm5  = *(M128A *)val; break;
-    case 23: context->u.s.Xmm6  = *(M128A *)val; break;
-    case 24: context->u.s.Xmm7  = *(M128A *)val; break;
-    case 25: context->u.s.Xmm8  = *(M128A *)val; break;
-    case 26: context->u.s.Xmm9  = *(M128A *)val; break;
-    case 27: context->u.s.Xmm10 = *(M128A *)val; break;
-    case 28: context->u.s.Xmm11 = *(M128A *)val; break;
-    case 29: context->u.s.Xmm12 = *(M128A *)val; break;
-    case 30: context->u.s.Xmm13 = *(M128A *)val; break;
-    case 31: context->u.s.Xmm14 = *(M128A *)val; break;
-    case 32: context->u.s.Xmm15 = *(M128A *)val; break;
-    case 33: context->u.s.Legacy[0] = *(M128A *)val; break;
-    case 34: context->u.s.Legacy[1] = *(M128A *)val; break;
-    case 35: context->u.s.Legacy[2] = *(M128A *)val; break;
-    case 36: context->u.s.Legacy[3] = *(M128A *)val; break;
-    case 37: context->u.s.Legacy[4] = *(M128A *)val; break;
-    case 38: context->u.s.Legacy[5] = *(M128A *)val; break;
-    case 39: context->u.s.Legacy[6] = *(M128A *)val; break;
-    case 40: context->u.s.Legacy[7] = *(M128A *)val; break;
+    case 17: memcpy( &context->u.s.Xmm0, val, sizeof(M128A) ); break;
+    case 18: memcpy( &context->u.s.Xmm1, val, sizeof(M128A) ); break;
+    case 19: memcpy( &context->u.s.Xmm2, val, sizeof(M128A) ); break;
+    case 20: memcpy( &context->u.s.Xmm3, val, sizeof(M128A) ); break;
+    case 21: memcpy( &context->u.s.Xmm4, val, sizeof(M128A) ); break;
+    case 22: memcpy( &context->u.s.Xmm5, val, sizeof(M128A) ); break;
+    case 23: memcpy( &context->u.s.Xmm6, val, sizeof(M128A) ); break;
+    case 24: memcpy( &context->u.s.Xmm7, val, sizeof(M128A) ); break;
+    case 25: memcpy( &context->u.s.Xmm8, val, sizeof(M128A) ); break;
+    case 26: memcpy( &context->u.s.Xmm9, val, sizeof(M128A) ); break;
+    case 27: memcpy( &context->u.s.Xmm10, val, sizeof(M128A) ); break;
+    case 28: memcpy( &context->u.s.Xmm11, val, sizeof(M128A) ); break;
+    case 29: memcpy( &context->u.s.Xmm12, val, sizeof(M128A) ); break;
+    case 30: memcpy( &context->u.s.Xmm13, val, sizeof(M128A) ); break;
+    case 31: memcpy( &context->u.s.Xmm14, val, sizeof(M128A) ); break;
+    case 32: memcpy( &context->u.s.Xmm15, val, sizeof(M128A) ); break;
+    case 33: memcpy( &context->u.s.Legacy[0], val, sizeof(M128A) ); break;
+    case 34: memcpy( &context->u.s.Legacy[1], val, sizeof(M128A) ); break;
+    case 35: memcpy( &context->u.s.Legacy[2], val, sizeof(M128A) ); break;
+    case 36: memcpy( &context->u.s.Legacy[3], val, sizeof(M128A) ); break;
+    case 37: memcpy( &context->u.s.Legacy[4], val, sizeof(M128A) ); break;
+    case 38: memcpy( &context->u.s.Legacy[5], val, sizeof(M128A) ); break;
+    case 39: memcpy( &context->u.s.Legacy[6], val, sizeof(M128A) ); break;
+    case 40: memcpy( &context->u.s.Legacy[7], val, sizeof(M128A) ); break;
     }
 }
 




More information about the wine-cvs mailing list