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