Sun Jul 26 10:49:05 2015 UTC ()
properly copy regs for kgdb, and define the number of registers properly.
from openbsd via Vicente Chaves and PR port-amd64/50091.


(mrg)
diff -r1.8 -r1.9 src/sys/arch/amd64/amd64/kgdb_machdep.c
diff -r1.14 -r1.15 src/sys/arch/amd64/include/db_machdep.h

cvs diff -r1.8 -r1.9 src/sys/arch/amd64/amd64/Attic/kgdb_machdep.c (expand / switch to unified diff)

--- src/sys/arch/amd64/amd64/Attic/kgdb_machdep.c 2011/04/03 22:29:25 1.8
+++ src/sys/arch/amd64/amd64/Attic/kgdb_machdep.c 2015/07/26 10:49:05 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: kgdb_machdep.c,v 1.8 2011/04/03 22:29:25 dyoung Exp $ */ 1/* $NetBSD: kgdb_machdep.c,v 1.9 2015/07/26 10:49:05 mrg Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1997 The NetBSD Foundation, Inc. 4 * Copyright (c) 1997 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9 * NASA Ames Research Center. 9 * NASA Ames Research Center.
10 * 10 *
11 * Redistribution and use in source and binary forms, with or without 11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions 12 * modification, are permitted provided that the following conditions
13 * are met: 13 * are met:
14 * 1. Redistributions of source code must retain the above copyright 14 * 1. Redistributions of source code must retain the above copyright
@@ -46,27 +46,27 @@ @@ -46,27 +46,27 @@
46 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 46 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
47 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 47 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
48 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 48 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
49 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 49 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
50 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 50 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
51 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 51 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
52 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 52 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
53 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 53 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
54 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 54 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
55 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 55 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56 */ 56 */
57 57
58#include <sys/cdefs.h> 58#include <sys/cdefs.h>
59__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.8 2011/04/03 22:29:25 dyoung Exp $"); 59__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.9 2015/07/26 10:49:05 mrg Exp $");
60 60
61#include "opt_ddb.h" 61#include "opt_ddb.h"
62 62
63/* 63/*
64 * Machine-dependent functions for remote KGDB. Originally written 64 * Machine-dependent functions for remote KGDB. Originally written
65 * for NetBSD/pc532 by Matthias Pfaller. Modified for NetBSD/i386 65 * for NetBSD/pc532 by Matthias Pfaller. Modified for NetBSD/i386
66 * by Jason R. Thorpe. Modified for NetBSD/amd64 by Frank van der Linden. 66 * by Jason R. Thorpe. Modified for NetBSD/amd64 by Frank van der Linden.
67 */ 67 */
68 68
69#include <sys/param.h> 69#include <sys/param.h>
70#include <sys/kgdb.h> 70#include <sys/kgdb.h>
71#include <sys/systm.h> 71#include <sys/systm.h>
72 72
@@ -149,37 +149,75 @@ kgdb_signal(int type) @@ -149,37 +149,75 @@ kgdb_signal(int type)
149 default: 149 default:
150 return (SIGEMT); 150 return (SIGEMT);
151 } 151 }
152} 152}
153 153
154/* 154/*
155 * Translate the values stored in the kernel regs struct to the format 155 * Translate the values stored in the kernel regs struct to the format
156 * understood by gdb. 156 * understood by gdb.
157 */ 157 */
158void 158void
159kgdb_getregs(db_regs_t *regs, kgdb_reg_t *gdb_regs) 159kgdb_getregs(db_regs_t *regs, kgdb_reg_t *gdb_regs)
160{ 160{
161 161
162 memcpy(gdb_regs, regs, sizeof *regs); 162 gdb_regs[ 0] = regs->tf_rax;
 163 gdb_regs[ 1] = regs->tf_rbx;
 164 gdb_regs[ 2] = regs->tf_rcx;
 165 gdb_regs[ 3] = regs->tf_rdx;
 166 gdb_regs[ 4] = regs->tf_rsi;
 167 gdb_regs[ 5] = regs->tf_rdi;
 168 gdb_regs[ 6] = regs->tf_rbp;
 169 gdb_regs[ 7] = regs->tf_rsp;
 170 gdb_regs[ 8] = regs->tf_r8;
 171 gdb_regs[ 9] = regs->tf_r9;
 172 gdb_regs[10] = regs->tf_r10;
 173 gdb_regs[11] = regs->tf_r11;
 174 gdb_regs[12] = regs->tf_r12;
 175 gdb_regs[13] = regs->tf_r13;
 176 gdb_regs[14] = regs->tf_r14;
 177 gdb_regs[15] = regs->tf_r15;
 178 gdb_regs[16] = regs->tf_rip;
 179 gdb_regs[17] = regs->tf_rflags;
 180 gdb_regs[18] = regs->tf_cs;
 181 gdb_regs[19] = regs->tf_ss;
163} 182}
164 183
165/* 184/*
166 * Reverse the above. 185 * Reverse the above.
167 */ 186 */
168void 187void
169kgdb_setregs(db_regs_t *regs, kgdb_reg_t *gdb_regs) 188kgdb_setregs(db_regs_t *regs, kgdb_reg_t *gdb_regs)
170{ 189{
171 190
172 memcpy(regs, gdb_regs, sizeof *regs); 191 regs->tf_rax = gdb_regs[ 0];
 192 regs->tf_rbx = gdb_regs[ 1];
 193 regs->tf_rcx = gdb_regs[ 2];
 194 regs->tf_rdx = gdb_regs[ 3];
 195 regs->tf_rsi = gdb_regs[ 4];
 196 regs->tf_rdi = gdb_regs[ 5];
 197 regs->tf_rbp = gdb_regs[ 6];
 198 regs->tf_rsp = gdb_regs[ 7];
 199 regs->tf_r8 = gdb_regs[ 8];
 200 regs->tf_r9 = gdb_regs[ 9];
 201 regs->tf_r10 = gdb_regs[10];
 202 regs->tf_r11 = gdb_regs[11];
 203 regs->tf_r12 = gdb_regs[12];
 204 regs->tf_r13 = gdb_regs[13];
 205 regs->tf_r14 = gdb_regs[14];
 206 regs->tf_r15 = gdb_regs[15];
 207 regs->tf_rip = gdb_regs[16];
 208 regs->tf_rflags = gdb_regs[17];
 209 regs->tf_cs = gdb_regs[18];
 210 regs->tf_ss = gdb_regs[19];
173}  211}
174 212
175/* 213/*
176 * Trap into kgdb to wait for debugger to connect, 214 * Trap into kgdb to wait for debugger to connect,
177 * noting on the console why nothing else is going on. 215 * noting on the console why nothing else is going on.
178 */ 216 */
179void 217void
180kgdb_connect(int verbose) 218kgdb_connect(int verbose)
181{ 219{
182 220
183 if (kgdb_dev == NODEV) 221 if (kgdb_dev == NODEV)
184 return; 222 return;
185 223

cvs diff -r1.14 -r1.15 src/sys/arch/amd64/include/db_machdep.h (expand / switch to unified diff)

--- src/sys/arch/amd64/include/db_machdep.h 2013/10/17 23:05:08 1.14
+++ src/sys/arch/amd64/include/db_machdep.h 2015/07/26 10:49:05 1.15
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: db_machdep.h,v 1.14 2013/10/17 23:05:08 christos Exp $ */ 1/* $NetBSD: db_machdep.h,v 1.15 2015/07/26 10:49:05 mrg Exp $ */
2 2
3/*  3/*
4 * Mach Operating System 4 * Mach Operating System
5 * Copyright (c) 1991,1990 Carnegie Mellon University 5 * Copyright (c) 1991,1990 Carnegie Mellon University
6 * All Rights Reserved. 6 * All Rights Reserved.
7 *  7 *
8 * Permission to use, copy, modify and distribute this software and its 8 * Permission to use, copy, modify and distribute this software and its
9 * documentation is hereby granted, provided that both the copyright 9 * documentation is hereby granted, provided that both the copyright
10 * notice and this permission notice appear in all copies of the 10 * notice and this permission notice appear in all copies of the
11 * software, derivative works or modified versions, and any portions 11 * software, derivative works or modified versions, and any portions
12 * thereof, and that both notices appear in supporting documentation. 12 * thereof, and that both notices appear in supporting documentation.
13 *  13 *
14 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 14 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
@@ -110,27 +110,27 @@ bool db_phys_eq(task_t, vaddr_t, task_t @@ -110,27 +110,27 @@ bool db_phys_eq(task_t, vaddr_t, task_t
110#endif 110#endif
111 111
112/* macros for printing OS server dependent task name */ 112/* macros for printing OS server dependent task name */
113 113
114#define DB_TASK_NAME(task) db_task_name(task) 114#define DB_TASK_NAME(task) db_task_name(task)
115#define DB_TASK_NAME_TITLE "COMMAND " 115#define DB_TASK_NAME_TITLE "COMMAND "
116#define DB_TASK_NAME_LEN 23 116#define DB_TASK_NAME_LEN 23
117#define DB_NULL_TASK_NAME "? " 117#define DB_NULL_TASK_NAME "? "
118 118
119/* 119/*
120 * Constants for KGDB. 120 * Constants for KGDB.
121 */ 121 */
122typedef long kgdb_reg_t; 122typedef long kgdb_reg_t;
123#define KGDB_NUMREGS 16 123#define KGDB_NUMREGS 20
124#define KGDB_BUFLEN 512 124#define KGDB_BUFLEN 512
125 125
126#if 0 126#if 0
127void db_task_name(/* task_t */); 127void db_task_name(/* task_t */);
128#endif 128#endif
129 129
130/* macro for checking if a thread has used floating-point */ 130/* macro for checking if a thread has used floating-point */
131 131
132#define db_thread_fp_used(thread) ((thread)->pcb->ims.ifps != 0) 132#define db_thread_fp_used(thread) ((thread)->pcb->ims.ifps != 0)
133 133
134int kdb_trap(int, int, db_regs_t *); 134int kdb_trap(int, int, db_regs_t *);
135 135
136#ifdef _KERNEL 136#ifdef _KERNEL