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