From owner-p4-projects@FreeBSD.ORG Mon Jan 7 06:43:46 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BAD9316A46B; Mon, 7 Jan 2008 06:43:46 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8008216A417 for ; Mon, 7 Jan 2008 06:43:46 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 414C513C448 for ; Mon, 7 Jan 2008 06:43:46 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m076hkXj015271 for ; Mon, 7 Jan 2008 06:43:46 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m076hknC015268 for perforce@freebsd.org; Mon, 7 Jan 2008 06:43:46 GMT (envelope-from kmacy@freebsd.org) Date: Mon, 7 Jan 2008 06:43:46 GMT Message-Id: <200801070643.m076hknC015268@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 132677 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Jan 2008 06:43:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=132677 Change 132677 by kmacy@pandemonium:kmacy:xen31 on 2008/01/07 06:42:48 map kernel text R/O re-map R/W in kdb_enter Affected files ... .. //depot/projects/xen31/sys/i386/xen/xen_machdep.c#14 edit .. //depot/projects/xen31/sys/kern/subr_kdb.c#3 edit Differences ... ==== //depot/projects/xen31/sys/i386/xen/xen_machdep.c#14 (text+ko) ==== @@ -691,7 +691,7 @@ void initvalues(start_info_t *startinfo) { - int i, l3_pages, l2_pages, l1_pages, offset; + int l3_pages, l2_pages, l1_pages, offset; vm_offset_t cur_space; struct physdev_set_iopl set_iopl; @@ -705,7 +705,8 @@ pd_entry_t *IdlePDPTnew, *IdlePTDnew; #else vm_paddr_t pdir_shadow_ma; -#endif +#endif + unsigned long i; #ifdef WRITABLE_PAGETABLES printk("using writable pagetables\n"); @@ -934,6 +935,14 @@ xen_flush_queue(); } #endif + /* + * re-map kernel text read-only + * + */ + for (i = (((vm_offset_t)&btext) & ~PAGE_MASK); + i < (((vm_offset_t)&etext) & ~PAGE_MASK); i += PAGE_SIZE) + PT_SET_MA(i, xpmap_ptom(VTOP(i)) | PG_V | PG_A); + printk("#7\n"); physfree = VTOP(cur_space); init_first = physfree >> PAGE_SHIFT; ==== //depot/projects/xen31/sys/kern/subr_kdb.c#3 (text+ko) ==== @@ -304,10 +304,22 @@ * string than 'msg', and is relied upon by DDB scripting to identify the * reason for entering the debugger so that the right script can be run. */ +#ifdef XEN +#include /* needed for btext/etext */ +#endif void kdb_enter(const char *why, const char *msg) { - +#ifdef XEN + unsigned long i; + + /* + * re-map kernel text R/W + */ + for (i = (((vm_offset_t)&btext) & ~PAGE_MASK); + i < (((vm_offset_t)&etext) & ~PAGE_MASK); i += PAGE_SIZE) + PT_SET_MA(i, xpmap_ptom(VTOP(i)) | PG_V | PG_A | PG_RW); +#endif if (kdb_dbbe != NULL && kdb_active == 0) { if (msg != NULL) printf("KDB: enter: %s\n", msg);