debug.c
来自「xen 3.2.2 源码」· C语言 代码 · 共 180 行
C
180 行
/* **************************************************************************** * Done by Dietmar Hahn <dietmar.hahn@fujitsu-siemens.com * * Description: ia64 specific part of the mini-os * Prints debug information on a crash of mini-os * * Parts are taken from FreeBSD. * **************************************************************************** * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */#include "os.h"static const char *ia64_vector_names[] = { "VHPT Translation", /* 0 */ "Instruction TLB", /* 1 */ "Data TLB", /* 2 */ "Alternate Instruction TLB", /* 3 */ "Alternate Data TLB", /* 4 */ "Data Nested TLB", /* 5 */ "Instruction Key Miss", /* 6 */ "Data Key Miss", /* 7 */ "Dirty-Bit", /* 8 */ "Instruction Access-Bit", /* 9 */ "Data Access-Bit", /* 10 */ "Break Instruction", /* 11 */ "External Interrupt", /* 12 */ "Reserved 13", /* 13 */ "Reserved 14", /* 14 */ "Reserved 15", /* 15 */ "Reserved 16", /* 16 */ "Reserved 17", /* 17 */ "Reserved 18", /* 18 */ "Reserved 19", /* 19 */ "Page Not Present", /* 20 */ "Key Permission", /* 21 */ "Instruction Access Rights", /* 22 */ "Data Access Rights", /* 23 */ "General Exception", /* 24 */ "Disabled FP-Register", /* 25 */ "NaT Consumption", /* 26 */ "Speculation", /* 27 */ "Reserved 28", /* 28 */ "Debug", /* 29 */ "Unaligned Reference", /* 30 */ "Unsupported Data Reference", /* 31 */ "Floating-point Fault", /* 32 */ "Floating-point Trap", /* 33 */ "Lower-Privilege Transfer Trap", /* 34 */ "Taken Branch Trap", /* 35 */ "Single Step Trap", /* 36 */ "Reserved 37", /* 37 */ "Reserved 38", /* 38 */ "Reserved 39", /* 39 */ "Reserved 40", /* 40 */ "Reserved 41", /* 41 */ "Reserved 42", /* 42 */ "Reserved 43", /* 43 */ "Reserved 44", /* 44 */ "IA-32 Exception", /* 45 */ "IA-32 Intercept", /* 46 */ "IA-32 Interrupt", /* 47 */ "Reserved 48", /* 48 */ "Reserved 49", /* 49 */ "Reserved 50", /* 50 */ "Reserved 51", /* 51 */ "Reserved 52", /* 52 */ "Reserved 53", /* 53 */ "Reserved 54", /* 54 */ "Reserved 55", /* 55 */ "Reserved 56", /* 56 */ "Reserved 57", /* 57 */ "Reserved 58", /* 58 */ "Reserved 59", /* 59 */ "Reserved 60", /* 60 */ "Reserved 61", /* 61 */ "Reserved 62", /* 62 */ "Reserved 63", /* 63 */ "Reserved 64", /* 64 */ "Reserved 65", /* 65 */ "Reserved 66", /* 66 */ "Reserved 67", /* 67 */};typedef struct{#if !defined(BIG_ENDIAN) uint64_t sof :7; /* 0-6 size of frame */ uint64_t sol :7; /* 7-13 size of locals (in + loc) */ uint64_t sor :4; uint64_t rrb_gr :7; uint64_t rrb_fr :7; uint64_t rrb_pr :6; uint64_t res :25; /* reserved */ uint64_t v :1; /* The v bit */#else /* !BIG_ENDIAN */ uint64_t v :1; /* The v bit */ uint64_t res :25; /* reserved */ uint64_t rrb_pr :6; uint64_t rrb_fr :7; uint64_t rrb_gr :7; uint64_t sor :4; uint64_t sol :7; /* 7-13 size of locals (in + loc) */ uint64_t sof :7; /* 0-6 size of frame */#endif /* BIG_ENDIAN */} ifs_t;voiddo_trap_error(trap_frame_t* tf){ ifs_t curIfs; printk("TRAP in mini-os:\n"); printk(" trap: %d (%s)\n", tf->trap_num, ia64_vector_names[tf->trap_num]); printk(" iip : 0x%.16lx ifa: 0x%.16lx\n", tf->iip, tf->ifa); printk(" ipsr: 0x%.16lx ifs: 0x%.16lx\n", tf->ipsr, tf->ifs); printk(" isr : 0x%.16lx\n", tf->isr); printk(" gp : 0x%.16lx sp : 0x%.16lx\n", tf->gp, tf->sp); printk(" rp : 0x%.16lx tp : 0x%.16lx\n", tf->b0, tf->tp); printk(" b6 : 0x%.16lx b7 : 0x%.16lx\n", tf->b6, tf->b7); printk(" r8 : 0x%.16lx\n", tf->r8); printk(" bsp : 0x%.16lx rsc: 0x%.16lx\n", tf->bsp, tf->rsc); printk(" r14 : 0x%.16lx r15: 0x%.16lx\n", tf->r14, tf->r15); printk(" r16 : 0x%.16lx r17: 0x%.16lx\n", tf->r16, tf->r17); printk(" r18 : 0x%.16lx r19: 0x%.16lx\n", tf->r18, tf->r19); printk(" r20 : 0x%.16lx r21: 0x%.16lx\n", tf->r20, tf->r21); printk(" r22 : 0x%.16lx r23: 0x%.16lx\n", tf->r22, tf->r23); printk(" r24 : 0x%.16lx r25: 0x%.16lx\n", tf->r24, tf->r25); printk(" r26 : 0x%.16lx r27: 0x%.16lx\n", tf->r26, tf->r27); printk(" r28 : 0x%.16lx r29: 0x%.16lx\n", tf->r28, tf->r29); printk(" r30 : 0x%.16lx r31: 0x%.16lx\n", tf->r30, tf->r31); __asm __volatile("flushrs;;"); curIfs = *((ifs_t*)((void*)(&tf->ifs))); if (!curIfs.v) printk(" ifs.v = 0"); else { uint64_t* regP; uint32_t i; printk(" cfm.sof: %d cfm.sol: %d\n", curIfs.sof, curIfs.sol); regP = (uint64_t *)(tf->bsp + tf->ndirty); for (i = curIfs.sof; i != 0; ) { if (i <= (((uint64_t)regP & 0x000001f8) >> 3)) { regP -= i; i = 0; break; } i -= ((uint64_t)regP & 0x000001f8) >> 3; regP = (uint64_t *)((uint64_t)regP & ~0x000001ff) - 1; } for (i = 0; i < curIfs.sof; i++) { if (((uint64_t)regP & 0x000001f8) == 0x000001f8) regP++; printk(" r%d: 0x%lx\n", i+32, *regP); regP++; } } HYPERVISOR_shutdown(SHUTDOWN_poweroff);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?