Files
system76-edk2/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm
Rebecca Cran e59a40b92c EmbeddedPkg/Scripts/LauterbachT32: Fix EfiLoadDxe.cmm
There have been many changes since EfiLoadDxe.cmm was last updated in
2011. The EFI_SYSTEM_TABLE can no longer be found by scanning memory on
4KB boundaries, so require users pass in its address instead. Update
various offsets so that the debug information can be found and loaded
with a recent version of TRACE32.

Signed-off-by: Rebecca Cran <rebecca@os.amperecomputing.com>
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-02-27 17:17:38 +00:00

73 lines
1.8 KiB
Plaintext

;
; 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
;
LOCAL &imgstart &filehdrstart &debugdirentryrva &debugtype &debugrva &dwarfsig &baseofcode &baseofdata &elfbase &elfpath &pathoffset
ENTRY &imgstart
&imgstart=&imgstart
print "PE32 image found at &imgstart"
; offset from dos hdr to PE file hdr (i.e. 'PE\0\0' signature)
&filehdrstart=&imgstart+Data.Long(c:&imgstart+0x3C)
; offset to debug dir in PE hdrs
&debugdirentryrva=Data.Long(c:&imgstart+0xf10)
if &debugdirentryrva==0
(
print "no debug dir for image at &imgstart"
enddo
)
&debugtype=Data.Long(c:&imgstart+&debugdirentryrva+0xc)
if (&debugtype!=0xdf)&&(&debugtype!=0x02)
(
print "debug type is not dwarf for image at &imgstart, it's &debugtype"
enddo
)
&debugrva=Data.Long(c:&imgstart+&debugdirentryrva+0x14)
&dwarfsig=Data.Long(c:&imgstart+&debugrva)
if &dwarfsig==0x66727764
(
&pathoffset=0xc
)
else
(
if &dwarfsig==0x3031424E
(
&pathoffset=0x10
)
else
(
print "debug signature not found for image at &imgstart, its &dwarfsig"
enddo
)
)
&elfpath=Data.String(c:&imgstart+&debugrva+&pathoffset)
&baseofcode=&imgstart+Data.Long(c:&filehdrstart+0x28)
&baseofdata=&imgstart+Data.Long(c:&filehdrstart+0x2c)
if (&baseofcode<&baseofdata)&&(&baseofcode!=0)
(
&elfbase=&baseofcode;
)
else
(
&elfbase=&baseofdata;
)
print "found path &elfpath with address &elfbase"
ON ERROR GOSUB
return
data.load.elf &elfpath &elfbase /NOCODE /NOCLEAR
ON error
enddo