From: ard.biesheuvel@linaro.org (Ard Biesheuvel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 6/6] ARM: efi: add PE/COFF debug table to EFI header
Date: Mon, 5 Nov 2018 19:44:38 +0100 [thread overview]
Message-ID: <20181105184438.19494-7-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <20181105184438.19494-1-ard.biesheuvel@linaro.org>
This updates the PE/COFF header to emit the absolute path to the
decompressor vmlinux ELF file into a so-called NB10 Codeview entry.
On DEBUG builds of EDK2 for ARM, this will result in output to be
printed as follows
add-symbol-file /home/ard/linux-build-arm/arch/arm/boot/compressed/vmlinux 0x43889000
which can be consumed by GDB directly, and load the decompressor
ELF symbols at the correct offset in the UEFI address space. With
both the decompressor and the firmware's ELF symbols loaded, we can
do single step debugging of calls made from the EFI stub into the
firmware and back, which is *really* helpful when debugging the
handover from UEFI to the decompressor.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
arch/arm/boot/compressed/Makefile | 4 ++
| 47 ++++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index d1862621556f..b3c7aff96b92 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -194,3 +194,7 @@ AFLAGS_hyp-stub.o := -Wa,-march=armv7-a
$(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S
$(call cmd,shipped)
+
+ifeq ($(CONFIG_EFI)$(CONFIG_DEBUG_INFO),yy)
+AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(obj)/vmlinux)\""
+endif
--git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S
index c94a88ae834d..5c29b31e7080 100644
--- a/arch/arm/boot/compressed/efi-header.S
+++ b/arch/arm/boot/compressed/efi-header.S
@@ -98,6 +98,11 @@ extra_header_fields:
.quad 0 @ CertificationTable
.quad 0 @ BaseRelocationTable
+#ifdef CONFIG_DEBUG_INFO
+ .long efi_debug_table - start @ DebugTable
+ .long efi_debug_table_size
+#endif
+
section_table:
.ascii ".text\0\0\0"
.long __pecoff_code_size @ VirtualSize
@@ -127,6 +132,48 @@ section_table:
.set section_count, (. - section_table) / 40
+#ifdef CONFIG_DEBUG_INFO
+ /*
+ * The debug table is referenced via its Relative Virtual
+ * Address (RVA), which is only defined for those parts of
+ * the image that are covered by a section declaration. Since
+ * this header is not covered by any section, the debug table
+ * must be emitted elsewhere. So stick it in the .rodata
+ * section instead.
+ *
+ * Note that the EFI debug entry itself may legally have a
+ * zero RVA, which means we can simply put it right after the
+ * section headers.
+ */
+ .section ".rodata", #alloc
+
+ .align 2
+efi_debug_table:
+ // EFI_IMAGE_DEBUG_DIRECTORY_ENTRY
+ .long 0 @ Characteristics
+ .long 0 @ TimeDateStamp
+ .short 0 @ MajorVersion
+ .short 0 @ MinorVersion
+ .long IMAGE_DEBUG_TYPE_CODEVIEW @ Type
+ .long efi_debug_entry_size @ SizeOfData
+ .long 0 @ RVA
+ .long efi_debug_entry - start @ FileOffset
+
+ .set efi_debug_table_size, . - efi_debug_table
+ .previous
+
+efi_debug_entry:
+ // EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY
+ .ascii "NB10" @ Signature
+ .long 0 @ Unknown
+ .long 0 @ Unknown2
+ .long 0 @ Unknown3
+
+ .asciz VMLINUX_PATH
+
+ .set efi_debug_entry_size, . - efi_debug_entry
+#endif
+
.align 12
__efi_start:
#endif
--
2.19.1
next prev parent reply other threads:[~2018-11-05 18:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-05 18:44 [PATCH 0/6] ARM: compressed: clean up section layout and enable EFI debugging Ard Biesheuvel
2018-11-05 18:44 ` [PATCH 1/6] ARM: compressed: move sharpsl startup code into subroutine Ard Biesheuvel
2018-11-05 18:59 ` Russell King - ARM Linux
2018-11-05 19:07 ` Ard Biesheuvel
2018-11-05 19:13 ` Russell King - ARM Linux
2018-11-05 19:25 ` Nicolas Pitre
2018-11-05 19:35 ` Ard Biesheuvel
2018-11-05 18:44 ` [PATCH 2/6] ARM: compressed: move sa1100 " Ard Biesheuvel
2018-11-05 19:00 ` Russell King - ARM Linux
2018-11-05 18:44 ` [PATCH 3/6] ARM: compressed: move xscale " Ard Biesheuvel
2018-11-05 19:00 ` Russell King - ARM Linux
2018-11-05 18:44 ` [PATCH 4/6] ARM: compressed: move BE32 handling into head.S Ard Biesheuvel
2018-11-05 18:44 ` [PATCH 5/6] ARM: compressed: put zImage header and EFI header in dedicated section Ard Biesheuvel
2018-11-05 18:44 ` Ard Biesheuvel [this message]
2018-11-05 19:09 ` [PATCH 0/6] ARM: compressed: clean up section layout and enable EFI debugging Russell King - ARM Linux
2018-11-05 19:10 ` Ard Biesheuvel
2018-11-05 19:14 ` Russell King - ARM Linux
2018-11-05 19:21 ` Ard Biesheuvel
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-all 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=20181105184438.19494-7-ard.biesheuvel@linaro.org \
--to=ard.biesheuvel@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).