PERFORCE change 132677 for review
Kip Macy
kmacy at FreeBSD.org
Sun Jan 6 22:43:47 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132677
Change 132677 by kmacy at 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 <machine/cpu.h> /* 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);
More information about the p4-projects
mailing list