]> git.proxmox.com Git - mirror_edk2.git/blame - BeagleBoardPkg/Debugger_scripts/trace32_load_symbols_cygwin.cmm
MdeModulePkg: Change the SMM debug lib instance
[mirror_edk2.git] / BeagleBoardPkg / Debugger_scripts / trace32_load_symbols_cygwin.cmm
CommitLineData
2ef2b01e 1//\r
1ebd6c11 2// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
2ef2b01e 3// \r
a1594be9 4// SPDX-License-Identifier: BSD-2-Clause-Patent\r
2ef2b01e
A
5//\r
6\r
7 ENTRY &ram_start &ram_size\r
8\r
9 ;If system is running then stop the execution so we can load symbols.\r
10 break\r
11 \r
12 ;Reset all windows\r
13 WINPAGE.RESET\r
14 \r
15 AREA.Reset\r
16 AREA.Create SYMBOL 300. 100.\r
17 AREA.View SYMBOL\r
18 AREA.Select SYMBOL\r
19 SYS.Option BE OFF\r
20 \r
21 ; Added based on suggestion from Lauterbach support.\r
22 MMU.TABLEWALK ON\r
23 MMU.ON\r
24\r
25 GOSUB load_symbols &ram_start &ram_size\r
26\r
27 ;Open some windows.\r
28 WINPOS 83.125 29.063 48. 9. 0. 0. W003\r
29 Register\r
30\r
31 WINPOS 83.25 10. 48. 9. 0. 1. W002\r
32 Var.Local\r
33 \r
34 END\r
35\r
36find_system_table:\r
37 ENTRY &mem_start &mem_size\r
38 &mem_ptr=&mem_start+&mem_size\r
39 RPT \r
40 (\r
41 &mem_ptr=&mem_ptr-0x400000 // 4 MB\r
42 &word1=Data.LONG(D:&mem_ptr)\r
43 &word2=Data.LONG(D:&mem_ptr+0x04)\r
44 IF &word1==0x20494249\r
45 (\r
46 IF &word2==0x54535953\r
47 (\r
48 &result=Data.LONG(D:&mem_ptr+0x08)\r
49 RETURN &result\r
50 )\r
51 )\r
52 )\r
53 WHILE &mem_ptr>&mem_start\r
54 &result=0\r
55 RETURN &result\r
56\r
57compare_guid:\r
58 ENTRY &guid\r
59 IF Data.LONG(D:&guid)==0x49152E77\r
60 (\r
61 IF Data.LONG(D:&guid+0x04)==0x47641ADA\r
62 (\r
63 IF Data.LONG(D:&guid+0x08)==0xFE7AA2B7\r
64 (\r
65 IF Data.LONG(D:&guid+0x0C)==0x8B5ED9FE\r
66 (\r
67 RETURN 0\r
68 )\r
69 )\r
70 )\r
71 )\r
72 RETURN 1 \r
73\r
74find_debug_info_table_header:\r
75 ENTRY &system_table\r
76 &config_table_entries=Data.LONG(D:&system_table+0x40)\r
77 &config_table_pointer=Data.LONG(D:&system_table+0x44)\r
78 RPT &config_table_entries\r
79 (\r
80 GOSUB compare_guid &config_table_pointer\r
81 ENTRY &result\r
82 IF &result==0\r
83 (\r
84 &result=Data.LONG(D:&config_table_pointer+0x10)\r
85 RETURN &result\r
86 ) \r
87 &config_table_pointer=&config_table_pointer+0x14\r
88 )\r
89 RETURN 0;\r
90\r
91valid_pe_header:\r
92 ENTRY &header\r
93 IF Data.BYTE(D:&header+0x00)==0x4D\r
94 (\r
95 IF Data.BYTE(D:&header+0x01)==0x5A\r
96 (\r
97 IF Data.BYTE(D:&header+0x80)==0x50\r
98 (\r
99 IF Data.BYTE(D:&header+0x81)==0x45\r
100 (\r
101 RETURN 1\r
102 )\r
103 )\r
104 )\r
105 )\r
106 RETURN 0\r
107\r
e6f3ed43
LL
108get_file_string:\r
109 ENTRY &stringOffset\r
110\r
2ef2b01e
A
111 local &string\r
112 \r
e6f3ed43
LL
113 &more_string=data.string(d:&stringOffset)\r
114\r
115 if (string.len("&more_string")>=128.)\r
116 (\r
117 &string="&string"+"&more_string"\r
118 &stringOffset=&stringOffset+string.len("&more_string")\r
119\r
120 //Get remaining file string\r
121 GOSUB get_file_string &stringOffset\r
122 ENTRY &more_string\r
123 &string="&string"+"&more_string"\r
124 )\r
125 else\r
126 (\r
127 &string="&string"+"&more_string"\r
128 &more_string=""\r
2ef2b01e
A
129 )\r
130 RETURN &string\r
131 \r
132load_symbol_file:\r
133 ENTRY &header &load_address\r
134 GOSUB valid_pe_header &header\r
135 ENTRY &result\r
136 \r
137 IF &result==1\r
138 (\r
139 &debugOffset=Data.LONG(D:&header+0x0128)\r
140 &stringOffset=&header+&debugOffset+0x002C\r
141 \r
142 &stringOffset=&stringOffset+11.\r
143\r
144 GOSUB get_file_string &stringOffset\r
145 ENTRY &filestring\r
146 \r
147 &filestring="c:"+"&filestring"\r
148\r
149 PRINT "&filestring 0x" &load_address\r
150 Data.load.elf &filestring &load_address /nocode /noclear\r
151 )\r
152 RETURN\r
153\r
154pe_headersize:\r
155 ENTRY &header;\r
156 RETURN Data.LONG(D:&header+0x00AC)\r
157\r
158load_symbols:\r
159 ENTRY &mem_start &mem_size\r
160 GOSUB find_system_table &mem_start &mem_size\r
161 ENTRY &system_table\r
162 GOSUB find_debug_info_table_header &system_table\r
163 ENTRY &debug_info_table_header\r
164 &debug_info_table=Data.LONG(D:&debug_info_table_header+0x08)\r
165 &debug_info_table_size=Data.LONG(D:&debug_info_table_header+0x04)\r
166 &index=0\r
167 RPT &debug_info_table_size\r
168 (\r
169 &debug_image_info=Data.LONG(D:&debug_info_table+&index)\r
170 IF &debug_image_info==0\r
171 RETURN \r
172 &loaded_image_protocol=Data.LONG(D:&debug_image_info+0x04);\r
173 &image_base=Data.LONG(D:&loaded_image_protocol+0x20);\r
174 GOSUB pe_headersize &image_base\r
175 ENTRY &header_size\r
176 &image_load_address=&image_base+&header_size\r
177 GOSUB load_symbol_file &image_base &image_load_address\r
178 &index=&index+0x4\r
179 )\r
180 \r
181 RETURN\r
182