| ; | |
| ; Copyright (c) 2024, Ampere Computing LLC. All rights reserved.<BR> | |
| ; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.<BR> | |
| ; | |
| ; SPDX-License-Identifier: BSD-2-Clause-Patent | |
| ; | |
| PARAMETERS &systbl | |
| gosub FindDebugInfo &systbl | |
| enddo | |
| FindDebugInfo: | |
| LOCAL &SystemTable &CfgTableEntries &ConfigTable &i &offset &dbghdr &dbgentries &dbgptr &dbginfo &loadedimg | |
| ENTRY &SystemTable | |
| &dbgentries=0 | |
| &CfgTableEntries=Data.Long(a:&SystemTable+0x68) | |
| &ConfigTable=Data.Long(a:&SystemTable+0x70) | |
| print "config table is at &ConfigTable (&CfgTableEntries entries)" | |
| ; now search for debug info entry with guid 49152E77-1ADA-4764-B7A2-7AFEFED95E8B | |
| ; 0x49152E77 0x47641ADA 0xFE7AA2B7 0x8B5ED9FE | |
| &i=0 | |
| while &i<&CfgTableEntries | |
| ( | |
| &offset=&ConfigTable+(&i*0x18) | |
| if Data.Long(a:&offset)==0x49152E77 | |
| ( | |
| if Data.Long(a:&offset+4)==0x47641ADA | |
| ( | |
| if Data.Long(a:&offset+8)==0xFE7AA2B7 | |
| ( | |
| if Data.Long(a:&offset+0xc)==0x8B5ED9FE | |
| ( | |
| &dbghdr=Data.Long(a:&offset+0x10) | |
| &dbgentries=Data.Long(a:&dbghdr+4) | |
| &dbgptr=Data.Long(a:&dbghdr+8) | |
| ) | |
| ) | |
| ) | |
| ) | |
| &i=&i+1 | |
| ) | |
| if &dbgentries==0 | |
| ( | |
| print "no debug entries found" | |
| return | |
| ) | |
| print "debug table at &dbgptr (&dbgentries entries)" | |
| symbol.reset | |
| &i=0 | |
| while &i<&dbgentries | |
| ( | |
| &dbginfo=Data.Long(a:&dbgptr+(&i*4)) | |
| if &dbginfo!=0 | |
| ( | |
| if Data.Long(a:&dbginfo)==1 ; normal debug info type | |
| ( | |
| &loadedimg=Data.Long(a:&dbginfo+8) | |
| &imagebaseptr=&loadedimg+0x40 | |
| &imagebase=Data.Long(a:&imagebaseptr) | |
| do ~~~~/EfiProcessPeImage.cmm "&imagebase" | |
| ) | |
| ) | |
| &i=&i+1 | |
| ) | |
| return |