From 4c5c90e24d4958e2e8254c83baa5f5d0f3741721 Mon Sep 17 00:00:00 2001 From: Pierre Beyssac Date: Fri, 8 Nov 2002 18:55:31 +0000 Subject: [PATCH] Avoid FreeBSD compatibility issues with dbreg structure. --- server/context_i386.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/context_i386.c b/server/context_i386.c index ffb9407ce12..b27b5f7fdea 100644 --- a/server/context_i386.c +++ b/server/context_i386.c @@ -373,12 +373,23 @@ static void get_thread_context( struct thread *thread, unsigned int flags, CONTE struct dbreg dbregs; if (ptrace( PTRACE_GETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1) goto error; +#ifdef DBREG_DRX + /* needed for FreeBSD, the structure fields have changed under 5.x */ + context->Dr0 = DBREG_DRX((&dbregs), 0); + context->Dr1 = DBREG_DRX((&dbregs), 1); + context->Dr2 = DBREG_DRX((&dbregs), 2); + context->Dr3 = DBREG_DRX((&dbregs), 3); + context->Dr6 = DBREG_DRX((&dbregs), 6); + context->Dr7 = DBREG_DRX((&dbregs), 7); +#else context->Dr0 = dbregs.dr0; context->Dr1 = dbregs.dr1; context->Dr2 = dbregs.dr2; context->Dr3 = dbregs.dr3; context->Dr6 = dbregs.dr6; context->Dr7 = dbregs.dr7; +#endif + #endif } if (flags & CONTEXT_FLOATING_POINT) @@ -437,6 +448,17 @@ static void set_thread_context( struct thread *thread, unsigned int flags, const { #ifdef PTRACE_SETDBREGS struct dbreg dbregs; +#ifdef DBREG_DRX + /* needed for FreeBSD, the structure fields have changed under 5.x */ + DBREG_DRX((&dbregs), 0) = context->Dr0; + DBREG_DRX((&dbregs), 1) = context->Dr1; + DBREG_DRX((&dbregs), 2) = context->Dr2; + DBREG_DRX((&dbregs), 3) = context->Dr3; + DBREG_DRX((&dbregs), 4) = 0; + DBREG_DRX((&dbregs), 5) = 0; + DBREG_DRX((&dbregs), 6) = context->Dr6; + DBREG_DRX((&dbregs), 7) = context->Dr7; +#else dbregs.dr0 = context->Dr0; dbregs.dr1 = context->Dr1; dbregs.dr2 = context->Dr2; @@ -445,6 +467,7 @@ static void set_thread_context( struct thread *thread, unsigned int flags, const dbregs.dr5 = 0; dbregs.dr6 = context->Dr6; dbregs.dr7 = context->Dr7; +#endif if (ptrace( PTRACE_SETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1) goto error; #endif