]> git.proxmox.com Git - mirror_edk2.git/blame - BeagleBoardPkg/Debugger_scripts/trace32_load_symbols.cmm
ARM Packages: CRLF fixup
[mirror_edk2.git] / BeagleBoardPkg / Debugger_scripts / trace32_load_symbols.cmm
CommitLineData
2ef2b01e 1//\r
1ebd6c11 2// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
2ef2b01e 3// \r
1ebd6c11 4// This program and the accompanying materials\r
2ef2b01e
A
5// are licensed and made available under the terms and conditions of the BSD License\r
6// which accompanies this distribution. The full text of the license may be found at\r
7// http://opensource.org/licenses/bsd-license.php\r
8//\r
9// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11//\r
12\r
13 ENTRY &ram_start &ram_size\r
14 \r
15 ;If system is running then stop the execution so we can load symbols.\r
16 break\r
17 \r
18 ;Reset all windows\r
19 WINPAGE.RESET\r
20 \r
21 ;Create AREA to display the symbols we are loading.\r
22 AREA.Reset\r
23 AREA.Create SYMBOL 300. 100.\r
24 AREA.View SYMBOL\r
25 AREA.Select SYMBOL\r
26 SYS.Option BE OFF\r
27 \r
28 ;Added based on suggestion from Lauterbach support.\r
29 MMU.TABLEWALK ON\r
30 MMU.ON\r
31\r
32 ;Load symbols.\r
33 GOSUB load_symbols &ram_start &ram_size\r
34\r
35 ;Open some windows and enable semihosting.\r
36 TOOLBAR ON\r
37 STATUSBAR ON\r
38 WINPAGE.RESET\r
39 \r
40 WINCLEAR\r
41 WINPOS 0.0 17.0 72. 13. 0. 0. W000\r
42 SYStem\r
43 \r
44 WINPOS 0.0 0.0 110. 55. 13. 1. W001\r
45 WINTABS 10. 10. 25. 62.\r
46 Data.List\r
47 \r
48 WINPAGE.SELECT P000\r
49\r
50 //Enable semihosting\r
51 System.Option.BigEndian OFF\r
52\r
53 tronchip.set swi on // ARM9/10/11 variant\r
54\r
55 // configure and open semihosting channel\r
56 winpos 50% 50% 50% 50%\r
57 term.heapinfo 0 0x20000 0x30000 0x20000\r
58 term.method armswi\r
59 term.mode string\r
60 term.gate\r
61\r
62 WINPOS 115.0 0. 70. 35. 0. 1. W002\r
63 Var.Local %HEX\r
64 \r
65 WINPOS 115.10 45. 48. 9. 0. 0. W003\r
66 Register\r
67 \r
68 END\r
69\r
70find_system_table:\r
71 ENTRY &mem_start &mem_size\r
72 &mem_ptr=&mem_start+&mem_size\r
73 RPT \r
74 (\r
75 &mem_ptr=&mem_ptr-0x400000 // 4 MB\r
76 &word1=Data.LONG(D:&mem_ptr)\r
77 &word2=Data.LONG(D:&mem_ptr+0x04)\r
78 IF &word1==0x20494249\r
79 (\r
80 IF &word2==0x54535953\r
81 (\r
82 &result=Data.LONG(D:&mem_ptr+0x08)\r
83 RETURN &result\r
84 )\r
85 )\r
86 )\r
87 WHILE &mem_ptr>&mem_start\r
88 &result=0\r
89 RETURN &result\r
90\r
91compare_guid:\r
92 ENTRY &guid\r
93 IF Data.LONG(D:&guid)==0x49152E77\r
94 (\r
95 IF Data.LONG(D:&guid+0x04)==0x47641ADA\r
96 (\r
97 IF Data.LONG(D:&guid+0x08)==0xFE7AA2B7\r
98 (\r
99 IF Data.LONG(D:&guid+0x0C)==0x8B5ED9FE\r
100 (\r
101 RETURN 0\r
102 )\r
103 )\r
104 )\r
105 )\r
106 RETURN 1 \r
107\r
108find_debug_info_table_header:\r
109 ENTRY &system_table\r
110 &config_table_entries=Data.LONG(D:&system_table+0x40)\r
111 &config_table_pointer=Data.LONG(D:&system_table+0x44)\r
112 RPT &config_table_entries\r
113 (\r
114 GOSUB compare_guid &config_table_pointer\r
115 ENTRY &result\r
116 IF &result==0\r
117 (\r
118 &result=Data.LONG(D:&config_table_pointer+0x10)\r
119 RETURN &result\r
120 ) \r
121 &config_table_pointer=&config_table_pointer+0x14\r
122 )\r
123 RETURN 0;\r
124\r
125valid_pe_header:\r
126 ENTRY &header\r
127 IF Data.BYTE(D:&header+0x00)==0x4D\r
128 (\r
129 IF Data.BYTE(D:&header+0x01)==0x5A\r
130 (\r
131 IF Data.BYTE(D:&header+0x80)==0x50\r
132 (\r
133 IF Data.BYTE(D:&header+0x81)==0x45\r
134 (\r
135 RETURN 1\r
136 )\r
137 )\r
138 )\r
139 )\r
140 RETURN 0\r
141\r
e6f3ed43
LL
142get_file_string:\r
143 ENTRY &stringOffset\r
144\r
145 local &string\r
146\r
147 &more_string=data.string(d:&stringOffset)\r
148\r
149 if (string.len("&more_string")>=128.)\r
150 (\r
151 &string="&string"+"&more_string"\r
152 &stringOffset=&stringOffset+string.len("&more_string")\r
153\r
154 //Get remaining file string\r
155 GOSUB get_file_string &stringOffset\r
156 ENTRY &more_string\r
157 &string="&string"+"&more_string"\r
158 )\r
159 else\r
160 (\r
161 &string="&string"+"&more_string"\r
162 &more_string=""\r
2ef2b01e
A
163 )\r
164 RETURN &string\r
165 \r
166load_symbol_file:\r
167 ENTRY &header &load_address\r
168 GOSUB valid_pe_header &header\r
169 ENTRY &result\r
170 \r
171 IF &result==1\r
172 (\r
173 &debugOffset=Data.LONG(D:&header+0x0128)\r
174 &stringOffset=&header+&debugOffset+0x002C\r
175 \r
176 GOSUB get_file_string &stringOffset\r
177 ENTRY &filestring\r
178 \r
179 PRINT "&filestring 0x" &load_address\r
180 TDIAG Data.load.elf &filestring &load_address /nocode /noclear\r
181 )\r
182 RETURN\r
183\r
184pe_headersize:\r
185 ENTRY &header;\r
186 RETURN Data.LONG(D:&header+0x00AC)\r
187\r
188load_symbols:\r
189 ENTRY &mem_start &mem_size\r
190 GOSUB find_system_table &mem_start &mem_size\r
191 ENTRY &system_table\r
192 GOSUB find_debug_info_table_header &system_table\r
193 ENTRY &debug_info_table_header\r
194 &debug_info_table=Data.LONG(D:&debug_info_table_header+0x08)\r
195 &debug_info_table_size=Data.LONG(D:&debug_info_table_header+0x04)\r
196 &index=0\r
197 RPT &debug_info_table_size\r
198 (\r
199 &debug_image_info=Data.LONG(D:&debug_info_table+&index)\r
200 IF &debug_image_info==0\r
201 RETURN \r
202 &loaded_image_protocol=Data.LONG(D:&debug_image_info+0x04);\r
203 &image_base=Data.LONG(D:&loaded_image_protocol+0x20);\r
204 GOSUB pe_headersize &image_base\r
205 ENTRY &header_size\r
206 &image_load_address=&image_base+&header_size\r
207 GOSUB load_symbol_file &image_base &image_load_address\r
208 &index=&index+0x4\r
209 )\r
210 \r
211 RETURN\r