summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2006-01-04 23:17:52 +0000
committerkan <kan@FreeBSD.org>2006-01-04 23:17:52 +0000
commitde096a0825a9a2498844d2bb2fcfaafd8667bc10 (patch)
treedb74e9e45dae6f701f32f94a2fe729e2de084607 /gnu
parent56aa38e89ca4adba873bae5fc1a4d2774242b044 (diff)
downloadFreeBSD-src-de096a0825a9a2498844d2bb2fcfaafd8667bc10.zip
FreeBSD-src-de096a0825a9a2498844d2bb2fcfaafd8667bc10.tar.gz
Add -w parameter which tells kgdb to open kmem-based targets in read-write
mode. This allows one to use kgdb on /dev/mem and be able to patch memory on a live system. This is identical to what -wcore used to do in previous gdb versions for FreeBSD. Requested by: wpaul
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/gdb/kgdb/main.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gnu/usr.bin/gdb/kgdb/main.c b/gnu/usr.bin/gdb/kgdb/main.c
index 0336bd8..12bc3c468 100644
--- a/gnu/usr.bin/gdb/kgdb/main.c
+++ b/gnu/usr.bin/gdb/kgdb/main.c
@@ -302,7 +302,7 @@ main(int argc, char *argv[])
struct stat st;
struct captured_main_args args;
char *s;
- int a, ch, quiet;
+ int a, ch, quiet, writecore;
dumpnr = -1;
@@ -327,8 +327,9 @@ main(int argc, char *argv[])
}
quiet = 0;
+ writecore = 0;
- while ((ch = getopt(argc, argv, "ac:d:fn:qr:v")) != -1) {
+ while ((ch = getopt(argc, argv, "ac:d:fn:qr:vw")) != -1) {
switch (ch) {
case 'a':
annotation_level++;
@@ -372,6 +373,9 @@ main(int argc, char *argv[])
case 'v': /* increase verbosity. */
verbose++;
break;
+ case 'w': /* core file is writeable. */
+ writecore = 1;
+ break;
case '?':
default:
usage();
@@ -464,7 +468,8 @@ main(int argc, char *argv[])
}
if (remote == NULL) {
- kvm = kvm_openfiles(kernel, vmcore, NULL, O_RDONLY, kvm_err);
+ kvm = kvm_openfiles(kernel, vmcore, NULL,
+ writecore ? O_RDWR : O_RDONLY, kvm_err);
if (kvm == NULL)
errx(1, kvm_err);
atexit(kgdb_atexit);
OpenPOWER on IntegriCloud