⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlb.lst

📁 au1200下的boot代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
GAS LISTING /tmp/ccLt6UhX.s 			page 1   1              		.section .mdebug.abi32   2              		.previous   3              		.section	.debug_abbrev,"",@progbits   4              	$Ldebug_abbrev0:   5              		.section	.debug_info,"",@progbits   6              	$Ldebug_info0:   7              		.section	.debug_line,"",@progbits   8              	$Ldebug_line0:   9 0000 2F010000 		.text   9      02009600    9      00000101    9      FB0E0A00    9      01010101   10              	$Ltext0:  11              		.data  12              		.align	2  13              		.type	lastVA, @object  14              		.size	lastVA, 4  15              	lastVA:  16 0000 00000050 		.word	1342177280  17 0004 00000000 		.text  17      00000000   17      00000000   18              		.align	2  19              		.globl	tlbInit  20              		.ent	tlbInit  21              		.type	tlbInit, @function  22              	tlbInit:  23              	$LFB2:  24              		.file 1 "/mnt/hgfs/boot/booter/source/tlb.c"   1:/mnt/hgfs/boot/booter/source/tlb.c **** /*   2:/mnt/hgfs/boot/booter/source/tlb.c ****  * Sample code to demonstrate TLB manipulation   3:/mnt/hgfs/boot/booter/source/tlb.c ****  */   4:/mnt/hgfs/boot/booter/source/tlb.c **** #include "example.h"   5:/mnt/hgfs/boot/booter/source/tlb.c ****    6:/mnt/hgfs/boot/booter/source/tlb.c **** /********************************************************************/   7:/mnt/hgfs/boot/booter/source/tlb.c ****    8:/mnt/hgfs/boot/booter/source/tlb.c **** typedef struct PTE   9:/mnt/hgfs/boot/booter/source/tlb.c **** {  10:/mnt/hgfs/boot/booter/source/tlb.c **** 	uint32 EntryLo0;  11:/mnt/hgfs/boot/booter/source/tlb.c **** 	uint32 EntryLo1;  12:/mnt/hgfs/boot/booter/source/tlb.c ****   13:/mnt/hgfs/boot/booter/source/tlb.c **** } PTE;  14:/mnt/hgfs/boot/booter/source/tlb.c ****   15:/mnt/hgfs/boot/booter/source/tlb.c **** /*  16:/mnt/hgfs/boot/booter/source/tlb.c ****  * Level 1 Page Table, array of pointers to real PTEs  17:/mnt/hgfs/boot/booter/source/tlb.c ****  */  18:/mnt/hgfs/boot/booter/source/tlb.c **** PTE *L1PTE[256];  19:/mnt/hgfs/boot/booter/source/tlb.c ****   20:/mnt/hgfs/boot/booter/source/tlb.c **** /*  21:/mnt/hgfs/boot/booter/source/tlb.c ****  * Level 2 Page Table, array of PTEs  22:/mnt/hgfs/boot/booter/source/tlb.c ****  */  23:/mnt/hgfs/boot/booter/source/tlb.c **** PTE L2PTE[4096];  24:/mnt/hgfs/boot/booter/source/tlb.c ****   25:/mnt/hgfs/boot/booter/source/tlb.c **** /* Simple virtual alloc scheme...arbitrary, just stay out of KSEG0,1 */  26:/mnt/hgfs/boot/booter/source/tlb.c **** static char *lastVA = (char *)0x50000000;  27:/mnt/hgfs/boot/booter/source/tlb.c **** GAS LISTING /tmp/ccLt6UhX.s 			page 2  28:/mnt/hgfs/boot/booter/source/tlb.c **** /********************************************************************/  29:/mnt/hgfs/boot/booter/source/tlb.c **** void  30:/mnt/hgfs/boot/booter/source/tlb.c **** tlbInit (void)  31:/mnt/hgfs/boot/booter/source/tlb.c **** {  25              		.loc 1 31 0  26              		.frame	$sp,24,$31		# vars= 0, regs= 1/0, args= 16, gp= 0  27              		.mask	0x80000000,-8  28              		.fmask	0x00000000,0  29              		.set	noreorder  30              		.set	nomacro  31              		  32 0000 E8FFBD27 		addiu	$sp,$sp,-24  33              	$LCFI0:  32:/mnt/hgfs/boot/booter/source/tlb.c **** 	extern void asmTlbInit (void);  33:/mnt/hgfs/boot/booter/source/tlb.c **** 	extern uint32 asmTlbRefillHandler[];  34:/mnt/hgfs/boot/booter/source/tlb.c **** 	extern uint32 asmTlbRefillHandlerEnd[];  35:/mnt/hgfs/boot/booter/source/tlb.c **** 	uint32 va;  36:/mnt/hgfs/boot/booter/source/tlb.c **** 	int i;  37:/mnt/hgfs/boot/booter/source/tlb.c ****   38:/mnt/hgfs/boot/booter/source/tlb.c **** 	uint32 *v = (uint32 *)0x80000000;  39:/mnt/hgfs/boot/booter/source/tlb.c **** 	uint32 *p, *q;  40:/mnt/hgfs/boot/booter/source/tlb.c ****   41:/mnt/hgfs/boot/booter/source/tlb.c **** 	/*  42:/mnt/hgfs/boot/booter/source/tlb.c **** 	 * Install TLB Refill handler.  43:/mnt/hgfs/boot/booter/source/tlb.c **** 	 */  44:/mnt/hgfs/boot/booter/source/tlb.c **** 	p = asmTlbRefillHandler;  34              		.loc 1 44 0  35 0004 0000023C 		lui	$2,%hi(asmTlbRefillHandler)  45:/mnt/hgfs/boot/booter/source/tlb.c **** 	q = asmTlbRefillHandlerEnd;  36              		.loc 1 45 0  37 0008 0000033C 		lui	$3,%hi(asmTlbRefillHandlerEnd)  38              		.loc 1 31 0  39 000c 1000BFAF 		sw	$31,16($sp)  40              	$LCFI1:  41              		.loc 1 44 0  42 0010 00004524 		addiu	$5,$2,%lo(asmTlbRefillHandler)  43              		.loc 1 45 0  44 0014 00006624 		addiu	$6,$3,%lo(asmTlbRefillHandlerEnd)  45              		.loc 1 38 0  46 0018 0080043C 		li	$4,-2147483648			# 0xffffffff80000000  47              	$L2:  46:/mnt/hgfs/boot/booter/source/tlb.c **** 	do  47:/mnt/hgfs/boot/booter/source/tlb.c **** 	{  48:/mnt/hgfs/boot/booter/source/tlb.c **** 		*v++ = *p++;  48              		.loc 1 48 0  49 001c 0000A28C 		lw	$2,0($5)  50 0020 0400A524 		addiu	$5,$5,4  49:/mnt/hgfs/boot/booter/source/tlb.c **** 	} while (p < q);  51              		.loc 1 49 0  52 0024 2B18A600 		sltu	$3,$5,$6  53              		.loc 1 48 0  54 0028 000082AC 		sw	$2,0($4)  55              		.loc 1 49 0  56 002c FBFF6014 		bne	$3,$0,$L2  57 0030 04008424 		addiu	$4,$4,4  58              	  50:/mnt/hgfs/boot/booter/source/tlb.c **** 	dcacheFlush();GAS LISTING /tmp/ccLt6UhX.s 			page 3  59              		.loc 1 50 0  60 0034 0000000C 		jal	dcacheFlush  61 0038 00000000 		nop  62              	  51:/mnt/hgfs/boot/booter/source/tlb.c **** 	icacheFlush();  63              		.loc 1 51 0  64 003c 0000000C 		jal	icacheFlush  65 0040 00000000 		nop  66              	  52:/mnt/hgfs/boot/booter/source/tlb.c ****   53:/mnt/hgfs/boot/booter/source/tlb.c **** 	/*  54:/mnt/hgfs/boot/booter/source/tlb.c **** 	 * Clear Status[EXL, ERL]  55:/mnt/hgfs/boot/booter/source/tlb.c **** 	 */  56:/mnt/hgfs/boot/booter/source/tlb.c **** 	cp0WrStatus(cp0RdStatus() & ~(STATUS_EXL | STATUS_ERL));  67              		.loc 1 56 0  68 0044 0000000C 		jal	cp0RdStatus  69 0048 00000000 		nop  70              	  71 004c F9FF0424 		li	$4,-7			# 0xfffffffffffffff9  72 0050 0000000C 		jal	cp0WrStatus  73 0054 24204400 		and	$4,$2,$4  74              	  57:/mnt/hgfs/boot/booter/source/tlb.c ****   58:/mnt/hgfs/boot/booter/source/tlb.c **** 	asmTlbInit();  75              		.loc 1 58 0  76 0058 0000000C 		jal	asmTlbInit  77 005c 00000000 		nop  78              	  59:/mnt/hgfs/boot/booter/source/tlb.c ****   60:/mnt/hgfs/boot/booter/source/tlb.c **** 	cp0WrPageMask(0x00000000); /* 4KB pages */  79              		.loc 1 60 0  80 0060 0000000C 		jal	cp0WrPageMask  81 0064 21200000 		move	$4,$0  82              	  83 0068 0000043C 		lui	$4,%hi(L1PTE)  84 006c 00008224 		addiu	$2,$4,%lo(L1PTE)  85 0070 FF000324 		li	$3,255			# 0xff  86              	$L8:  61:/mnt/hgfs/boot/booter/source/tlb.c **** #define PAGE_SIZE 4096  62:/mnt/hgfs/boot/booter/source/tlb.c ****   63:/mnt/hgfs/boot/booter/source/tlb.c **** 	/*  64:/mnt/hgfs/boot/booter/source/tlb.c **** 	 * Initialize L1PTE and L2PTE  65:/mnt/hgfs/boot/booter/source/tlb.c **** 	 */  66:/mnt/hgfs/boot/booter/source/tlb.c **** 	for (i = 0; i < 256; ++i)  87              		.loc 1 66 0  88 0074 FFFF6324 		addiu	$3,$3,-1  67:/mnt/hgfs/boot/booter/source/tlb.c **** 		L1PTE[i] = NULL;  89              		.loc 1 67 0  90 0078 000040AC 		sw	$0,0($2)  91 007c FDFF6104 		bgez	$3,$L8  92 0080 04004224 		addiu	$2,$2,4  93              	  94 0084 0000023C 		lui	$2,%hi(L2PTE)  95 0088 00004524 		addiu	$5,$2,%lo(L2PTE)  96 008c 2110A000 		move	$2,$5  97 0090 FF0F0324 		li	$3,4095			# 0xfff  98              	$L12:GAS LISTING /tmp/ccLt6UhX.s 			page 4  68:/mnt/hgfs/boot/booter/source/tlb.c **** 	for (i = 0; i < 4096; ++i)  99              		.loc 1 68 0 100 0094 FFFF6324 		addiu	$3,$3,-1  69:/mnt/hgfs/boot/booter/source/tlb.c **** 	{  70:/mnt/hgfs/boot/booter/source/tlb.c **** 		L2PTE[i].EntryLo0 = NULL; 101              		.loc 1 70 0 102 0098 000040AC 		sw	$0,0($2)  71:/mnt/hgfs/boot/booter/source/tlb.c **** 		L2PTE[i].EntryLo1 = NULL; 103              		.loc 1 71 0 104 009c 040040AC 		sw	$0,4($2) 105 00a0 FCFF6104 		bgez	$3,$L12 106 00a4 08004224 		addiu	$2,$2,8 107              	  72:/mnt/hgfs/boot/booter/source/tlb.c **** 	}  73:/mnt/hgfs/boot/booter/source/tlb.c ****   74:/mnt/hgfs/boot/booter/source/tlb.c **** 	/* Connect L2PTE */  75:/mnt/hgfs/boot/booter/source/tlb.c **** 	va = (uint32)lastVA;  76:/mnt/hgfs/boot/booter/source/tlb.c **** 	va >>= 24; 108              		.loc 1 76 0 109 00a8 0000023C 		lui	$2,%hi(lastVA) 110 00ac 03004390 		lbu	$3,%lo(lastVA+3)($2)  77:/mnt/hgfs/boot/booter/source/tlb.c **** 	L1PTE[(int)va] = L2PTE; 111              		.loc 1 77 0 112 00b0 1000BF8F 		lw	$31,16($sp) 113 00b4 00008424 		addiu	$4,$4,%lo(L1PTE) 114 00b8 80180300 		sll	$3,$3,2 115 00bc 21186400 		addu	$3,$3,$4 116 00c0 1800BD27 		addiu	$sp,$sp,24 117 00c4 0800E003 		j	$31 118 00c8 000065AC 		sw	$5,0($3) 119              	 120              		.set	macro 121              		.set	reorder 122              	$LFE2: 123              		.end	tlbInit 124              		.section	.rodata.str1.4,"aMS",@progbits,1 125              		.align	2 126              	$LC0: 127 0000 4552524F 		.ascii	"ERROR: must walk PTE array\n\000" 127      523A206D  127      75737420  127      77616C6B  127      20505445  128              		.text 129              		.align	2 130              		.globl	mapVirtualToPhysical 131              		.ent	mapVirtualToPhysical 132              		.type	mapVirtualToPhysical, @function 133              	mapVirtualToPhysical: 134              	$LFB3:  78:/mnt/hgfs/boot/booter/source/tlb.c ****   79:/mnt/hgfs/boot/booter/source/tlb.c **** /* For test purposes only */  80:/mnt/hgfs/boot/booter/source/tlb.c **** 	//L1PTE[0] = L2PTE;  81:/mnt/hgfs/boot/booter/source/tlb.c **** 	//L2PTE[0].EntryLo0 = (0x00000000 >> 6) | 0x17;  82:/mnt/hgfs/boot/booter/source/tlb.c **** 	//L2PTE[0].EntryLo1 = 0;  83:/mnt/hgfs/boot/booter/source/tlb.c ****   84:/mnt/hgfs/boot/booter/source/tlb.c **** 	/* FIX!!! L1PTE must meet alignment requirements firstGAS LISTING /tmp/ccLt6UhX.s 			page 5  85:/mnt/hgfs/boot/booter/source/tlb.c **** 	cp0WrContext((uint32)L1PTE);  86:/mnt/hgfs/boot/booter/source/tlb.c **** 	*/  87:/mnt/hgfs/boot/booter/source/tlb.c **** }  88:/mnt/hgfs/boot/booter/source/tlb.c ****   89:/mnt/hgfs/boot/booter/source/tlb.c **** /********************************************************************/  90:/mnt/hgfs/boot/booter/source/tlb.c **** phys_t  91:/mnt/hgfs/boot/booter/source/tlb.c **** mapVirtualToPhysical (void *va)  92:/mnt/hgfs/boot/booter/source/tlb.c **** { 135              		.loc 1 92 0 136              		.frame	$sp,32,$31		# vars= 0, regs= 3/0, args= 16, gp= 0 137              		.mask	0x80030000,-8 138              		.fmask	0x00000000,0 139              		.set	noreorder 140              		.set	nomacro 141              		  93:/mnt/hgfs/boot/booter/source/tlb.c **** 	phys_t pa = NULL;  94:/mnt/hgfs/boot/booter/source/tlb.c ****   95:/mnt/hgfs/boot/booter/source/tlb.c **** 	if ((va >= (void *)0x80000000) && (va < (void *)0xC0000000)) 142              		.loc 1 95 0 143 00cc 0080023C 		li	$2,-2147483648			# 0xffffffff80000000 144 00d0 FF3F033C 		li	$3,1073676288			# 0x3fff0000 145 00d4 21108200 		addu	$2,$4,$2 146 00d8 FFFF6334 		ori	$3,$3,0xffff 147              		.loc 1 92 0 148 00dc E0FFBD27 		addiu	$sp,$sp,-32 149              	$LCFI2: 150 00e0 21288000 		move	$5,$4 151              		.loc 1 95 0 152 00e4 2B186200 		sltu	$3,$3,$2  96:/mnt/hgfs/boot/booter/source/tlb.c **** 	{  97:/mnt/hgfs/boot/booter/source/tlb.c **** 		pa = (phys_t)((uint32)va & ~0xE0000000);  98:/mnt/hgfs/boot/booter/source/tlb.c **** 	}  99:/mnt/hgfs/boot/booter/source/tlb.c **** 	else 100:/mnt/hgfs/boot/booter/source/tlb.c **** 		printf("ERROR: must walk PTE array\n"); 153              		.loc 1 100 0 154 00e8 0000043C 		lui	$4,%hi($LC0) 155              		.loc 1 92 0 156 00ec 1400B1AF 		sw	$17,20($sp) 157              	$LCFI3: 158 00f0 1000B0AF 		sw	$16,16($sp) 159              	$LCFI4: 160 00f4 1800BFAF 		sw	$31,24($sp) 161              	$LCFI5: 162              		.loc 1 100 0 163 00f8 00008424 		addiu	$4,$4,%lo($LC0) 164              		.loc 1 93 0 165 00fc 21800000 		move	$16,$0 166              		.loc 1 95 0 167 0100 0C006014 		bne	$3,$0,$L19 168 0104 21880000 		move	$17,$0 169              	 170              		.loc 1 97 0 171 0108 FF1F023C 		li	$2,536805376			# 0x1fff0000 172 010c FFFF4234 		ori	$2,$2,0xffff 173 0110 2480A200 		and	$16,$5,$2 174 0114 21880000 		move	$17,$0 101:/mnt/hgfs/boot/booter/source/tlb.c **** GAS LISTING /tmp/ccLt6UhX.s 			page 6 102:/mnt/hgfs/boot/booter/source/tlb.c **** 	return pa; 103:/mnt/hgfs/boot/booter/source/tlb.c **** } 175              		.loc 1 103 0 176 0118 21100002 		move	$2,$16 177 011c 21182002 		move	$3,$17 178 0120 1800BF8F 		lw	$31,24($sp) 179 0124 1400B18F 		lw	$17,20($sp) 180 0128 1000B08F 		lw	$16,16($sp) 181 012c 0800E003 		j	$31 182 0130 2000BD27 		addiu	$sp,$sp,32 183              	 184              	$L19: 185              		.loc 1 100 0 186 0134 0000000C 		jal	printf 187 0138 00000000 		nop 188              	 189              		.loc 1 103 0 190 013c 21100002 		move	$2,$16 191 0140 21182002 		move	$3,$17 192 0144 1800BF8F 		lw	$31,24($sp) 193 0148 1400B18F 		lw	$17,20($sp) 194 014c 1000B08F 		lw	$16,16($sp) 195 0150 0800E003 		j	$31 196 0154 2000BD27 		addiu	$sp,$sp,32 197              	 198              		.set	macro 199              		.set	reorder 200              	$LFE3: 201              		.end	mapVirtualToPhysical 202              		.align	2 203              		.globl	valloc 204              		.ent	valloc 205              		.type	valloc, @function 206              	valloc: 207              	$LFB4: 104:/mnt/hgfs/boot/booter/source/tlb.c ****  105:/mnt/hgfs/boot/booter/source/tlb.c **** /********************************************************************/ 106:/mnt/hgfs/boot/booter/source/tlb.c **** void * 107:/mnt/hgfs/boot/booter/source/tlb.c **** valloc (unsigned long size, unsigned long flags) 108:/mnt/hgfs/boot/booter/source/tlb.c **** { 208              		.loc 1 108 0 209              		.frame	$sp,0,$31		# vars= 0, regs= 0/0, args= 0, gp= 0 210              		.mask	0x00000000,0 211              		.fmask	0x00000000,0 212              		.set	noreorder 213              		.set	nomacro 214              		 109:/mnt/hgfs/boot/booter/source/tlb.c **** 	/* 110:/mnt/hgfs/boot/booter/source/tlb.c **** 	 * Allocate a chunk of virtual address space 111:/mnt/hgfs/boot/booter/source/tlb.c **** 	 * FIX Someday let flags specify an alignment? 112:/mnt/hgfs/boot/booter/source/tlb.c **** 	 */ 113:/mnt/hgfs/boot/booter/source/tlb.c **** 	void *va; 114:/mnt/hgfs/boot/booter/source/tlb.c ****  115:/mnt/hgfs/boot/booter/source/tlb.c **** 	/* NOTE: There is no check for overflow of the single L2PTE */ 116:/mnt/hgfs/boot/booter/source/tlb.c **** 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -