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