summaryrefslogtreecommitdiffstats
path: root/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm
blob: 06d307e12d8c4e0a2e14d3807f7ee9ad4dfb7a4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
;
; 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