From: "Rebecca Cran" <rebecca@bsdio.com>
To: devel@edk2.groups.io, rebecca@os.amperecomputing.com,
Leif Lindholm <quic_llindhol@quicinc.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
Abner Chang <abner.chang@amd.com>,
Michael D Kinney <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [PATCH 1/1] EmbeddedPkg/Scripts/LauterbachT32: Fix EfiLoadDxe.cmm
Date: Sun, 11 Feb 2024 16:10:32 -0700 [thread overview]
Message-ID: <d08403f1-1c6e-4d04-aaaf-c65bef412ba3@bsdio.com> (raw)
In-Reply-To: <20240129190136.1377641-2-rebecca@os.amperecomputing.com>
I'm guessing there haven't been any reviews because so few people are
familiar with the PRACTICE scripting language.
If there's nobody who can review it, could I get approval to commit it
anyway?
--
Rebecca Cran
On 1/29/24 12:01, Rebecca Cran via groups.io wrote:
> 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>
> ---
> EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm | 77 +++-----------------
> EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm | 7 +-
> EmbeddedPkg/Scripts/LauterbachT32/Readme.md | 8 +-
> 3 files changed, 19 insertions(+), 73 deletions(-)
>
> diff --git a/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm b/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm
> index 1605a9b478df..06d307e12d8c 100644
> --- a/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm
> +++ b/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadDxe.cmm
> @@ -1,79 +1,22 @@
> ;
> +; 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 &maxmem &systbl &memsize
> -
> - &memsize=0x20000000 ; default to 512MB
> -
> - gosub FindSystemTable &memsize
> - ENTRY &systbl
> -
> - if &systbl!=0
> - (
> - print "found system table at &systbl"
> - gosub FindDebugInfo &systbl
> - )
> - else
> - (
> - print "ERROR: system table not found, check memory size"
> - )
> + PARAMETERS &systbl
> +
> + gosub FindDebugInfo &systbl
> enddo
>
> -FindSystemTable:
> - LOCAL &TopOfRam &offset
> - ENTRY &TopOfRam
> -
> - print "FindSystemTable"
> - print "top of mem is &TopOfRam$"
> -
> - &offset=&TopOfRam
> -
> - ; align to highest 4MB boundary
> - &offset=&offset&0xFFC00000
> -
> - ; start at top and look on 4MB boundaries for system table ptr structure
> - while &offset>0
> - (
> - ; low signature match
> - if Data.Long(a:&offset)==0x20494249
> - (
> - ; high signature match
> - if Data.Long(a:&offset+4)==0x54535953
> - (
> - ; less than 4GB?
> - if Data.Long(a:&offset+0x0c)==0
> - (
> - ; less than top of ram?
> - if Data.Long(a:&offset+8)<&TopOfRam
> - (
> - return Data.Long(a:&offset+8)
> - )
> - )
> - )
> - )
> -
> - if &offset<0x400000
> - (
> - return 0
> - )
> - &offset=&offset-0x400000
> - )
> -
> - return 0
> -
> -
> FindDebugInfo:
> LOCAL &SystemTable &CfgTableEntries &ConfigTable &i &offset &dbghdr &dbgentries &dbgptr &dbginfo &loadedimg
> ENTRY &SystemTable
>
> - print "FindDebugInfo"
> -
> &dbgentries=0
> - &CfgTableEntries=Data.Long(a:&SystemTable+0x40)
> - &ConfigTable=Data.Long(a:&SystemTable+0x44)
> + &CfgTableEntries=Data.Long(a:&SystemTable+0x68)
> + &ConfigTable=Data.Long(a:&SystemTable+0x70)
>
> print "config table is at &ConfigTable (&CfgTableEntries entries)"
>
> @@ -82,7 +25,7 @@ FindDebugInfo:
> &i=0
> while &i<&CfgTableEntries
> (
> - &offset=&ConfigTable+(&i*0x14)
> + &offset=&ConfigTable+(&i*0x18)
> if Data.Long(a:&offset)==0x49152E77
> (
> if Data.Long(a:&offset+4)==0x47641ADA
> @@ -120,8 +63,10 @@ FindDebugInfo:
> (
> if Data.Long(a:&dbginfo)==1 ; normal debug info type
> (
> - &loadedimg=Data.Long(a:&dbginfo+4)
> - do EfiProcessPeImage Data.Long(a:&loadedimg+0x20)
> + &loadedimg=Data.Long(a:&dbginfo+8)
> + &imagebaseptr=&loadedimg+0x40
> + &imagebase=Data.Long(a:&imagebaseptr)
> + do ~~~~/EfiProcessPeImage.cmm "&imagebase"
> )
> )
> &i=&i+1
> diff --git a/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm b/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm
> index c3aab9d06a47..b0d97eec71b0 100644
> --- a/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm
> +++ b/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessPeImage.cmm
> @@ -1,4 +1,5 @@
> ;
> +; 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
> @@ -10,11 +11,11 @@
> &imgstart=&imgstart
> print "PE32 image found at &imgstart"
>
> - ; offset from dos hdr to PE file hdr
> + ; 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:&filehdrstart+0xA8)
> + &debugdirentryrva=Data.Long(c:&imgstart+0xf10)
> if &debugdirentryrva==0
> (
> print "no debug dir for image at &imgstart"
> @@ -62,7 +63,7 @@
> &elfbase=&baseofdata;
> )
>
> - print "found path &elfpath"
> + print "found path &elfpath with address &elfbase"
> ON ERROR GOSUB
> return
> data.load.elf &elfpath &elfbase /NOCODE /NOCLEAR
> diff --git a/EmbeddedPkg/Scripts/LauterbachT32/Readme.md b/EmbeddedPkg/Scripts/LauterbachT32/Readme.md
> index 51d2c8da5405..c30ec20a3d96 100644
> --- a/EmbeddedPkg/Scripts/LauterbachT32/Readme.md
> +++ b/EmbeddedPkg/Scripts/LauterbachT32/Readme.md
> @@ -1,10 +1,10 @@
> # DXE Phase Debug
> -Update the memsize variable in EfiLoadDxe.cmm for the actual amount of memory
> -available in your system. Allow your system to boot to the point that the DXE
> +Allow your system to boot to the point that the DXE
> core is initialized (so that the System Table and Debug Information table is
> present in memory) and execute this script (using the toolbar button or
> -'do EfiLoadDxe' from the command area). It will scan memory for the debug info
> -table and load modules in it.
> +'do EfiLoadDxe "0xGST_ADDRESS"' from the command area). 'GST_ADDRESS' is the
> +address of the EFI_SYSTEM_TABLE, and can be found by the global `gST`.
> +The script will scan memory for the debug info table and load modules in it.
>
> # SEC/PEI Phase Debug
> There is no way to autodetect where these images reside so you must pass an
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115345): https://edk2.groups.io/g/devel/message/115345
Mute This Topic: https://groups.io/mt/104038273/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2024-02-11 23:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-29 19:01 [edk2-devel] [PATCH 0/1] EmbeddedPkg/Scripts/LauterbachT32: Fix EfiLoadDxe.cmm Rebecca Cran via groups.io
2024-01-29 19:01 ` [edk2-devel] [PATCH 1/1] " Rebecca Cran via groups.io
2024-02-11 23:10 ` Rebecca Cran [this message]
2024-02-12 17:41 ` Leif Lindholm
2024-02-27 17:24 ` Rebecca Cran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d08403f1-1c6e-4d04-aaaf-c65bef412ba3@bsdio.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox