]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmbeddedPkg / Scripts / LauterbachT32 / EfiLoadDxe.cmm
CommitLineData
98790d81 1;\r
2; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.<BR>\r
3; \r
878b807a 4; SPDX-License-Identifier: BSD-2-Clause-Patent\r
98790d81 5; \r
6\r
7 LOCAL &maxmem &systbl &memsize\r
8 \r
9 &memsize=0x20000000 ; default to 512MB\r
10 \r
11 gosub FindSystemTable &memsize\r
12 ENTRY &systbl\r
13 \r
14 if &systbl!=0\r
15 (\r
16 print "found system table at &systbl"\r
17 gosub FindDebugInfo &systbl\r
18 )\r
19 else\r
20 (\r
21 print "ERROR: system table not found, check memory size"\r
22 )\r
23 enddo\r
24\r
25FindSystemTable:\r
26 LOCAL &TopOfRam &offset\r
27 ENTRY &TopOfRam\r
28 \r
29 print "FindSystemTable"\r
30 print "top of mem is &TopOfRam$"\r
31 \r
32 &offset=&TopOfRam\r
33 \r
34 ; align to highest 4MB boundary\r
35 &offset=&offset&0xFFC00000\r
36 \r
37 ; start at top and look on 4MB boundaries for system table ptr structure\r
38 while &offset>0\r
39 (\r
40 ; low signature match\r
41 if Data.Long(a:&offset)==0x20494249\r
42 (\r
43 ; high signature match\r
44 if Data.Long(a:&offset+4)==0x54535953\r
45 (\r
46 ; less than 4GB?\r
47 if Data.Long(a:&offset+0x0c)==0\r
48 (\r
49 ; less than top of ram?\r
50 if Data.Long(a:&offset+8)<&TopOfRam\r
51 (\r
52 return Data.Long(a:&offset+8)\r
53 )\r
54 )\r
55 )\r
56 )\r
57 \r
58 if &offset<0x400000\r
59 (\r
60 return 0\r
61 )\r
62 &offset=&offset-0x400000\r
63 )\r
64 \r
65 return 0\r
66\r
67\r
68FindDebugInfo:\r
69 LOCAL &SystemTable &CfgTableEntries &ConfigTable &i &offset &dbghdr &dbgentries &dbgptr &dbginfo &loadedimg\r
70 ENTRY &SystemTable\r
71 \r
72 print "FindDebugInfo"\r
73 \r
74 &dbgentries=0\r
75 &CfgTableEntries=Data.Long(a:&SystemTable+0x40)\r
76 &ConfigTable=Data.Long(a:&SystemTable+0x44)\r
77 \r
78 print "config table is at &ConfigTable (&CfgTableEntries entries)"\r
79 \r
80 ; now search for debug info entry with guid 49152E77-1ADA-4764-B7A2-7AFEFED95E8B\r
81 ; 0x49152E77 0x47641ADA 0xFE7AA2B7 0x8B5ED9FE\r
82 &i=0\r
83 while &i<&CfgTableEntries\r
84 (\r
85 &offset=&ConfigTable+(&i*0x14)\r
86 if Data.Long(a:&offset)==0x49152E77\r
87 (\r
88 if Data.Long(a:&offset+4)==0x47641ADA\r
89 (\r
90 if Data.Long(a:&offset+8)==0xFE7AA2B7\r
91 (\r
92 if Data.Long(a:&offset+0xc)==0x8B5ED9FE\r
93 (\r
94 &dbghdr=Data.Long(a:&offset+0x10)\r
95 &dbgentries=Data.Long(a:&dbghdr+4)\r
96 &dbgptr=Data.Long(a:&dbghdr+8)\r
97 )\r
98 )\r
99 )\r
100 )\r
101 \r
102 &i=&i+1\r
103 )\r
104 \r
105 if &dbgentries==0\r
106 (\r
107 print "no debug entries found"\r
108 return\r
109 )\r
110 \r
111 print "debug table at &dbgptr (&dbgentries entries)"\r
112 \r
113 symbol.reset\r
114 \r
115 &i=0\r
116 while &i<&dbgentries\r
117 (\r
118 &dbginfo=Data.Long(a:&dbgptr+(&i*4))\r
119 if &dbginfo!=0\r
120 (\r
121 if Data.Long(a:&dbginfo)==1 ; normal debug info type\r
122 (\r
123 &loadedimg=Data.Long(a:&dbginfo+4)\r
124 do EfiProcessPeImage Data.Long(a:&loadedimg+0x20)\r
125 )\r
126 )\r
127 &i=&i+1\r
128 )\r
129 return\r