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