From: ard.biesheuvel@linaro.org (Ard Biesheuvel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 7/7] arm: efi: add PE/COFF debug table to EFI header
Date: Thu, 29 Jun 2017 08:18:49 +0000 [thread overview]
Message-ID: <20170629081849.15081-8-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <20170629081849.15081-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.
This is hugely helpful when debugging the firmware->stub handover.
Cc: Russell King <linux@armlinux.org.uk>
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 d50430c40045..6b978bdbac3e 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -196,3 +196,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 a14516f7a27e..e902414e90b6 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:
.text
--
2.9.3
prev parent reply other threads:[~2017-06-29 8:18 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 8:18 [PATCH v2 0/7] ARM: efi: PE/COFF cleanup/hardening Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 1/7] arm: efi: remove forbidden values from the PE/COFF header Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 2/7] arm: efi: remove pointless dummy .reloc section Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 3/7] arm: efi: replace open coded constants with symbolic ones Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 4/7] arm: compressed: discard ksymtab/kcrctab sections Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 5/7] arm: efi: split zImage code and data into separate PE/COFF sections Ard Biesheuvel
2017-09-08 13:50 ` Gregory CLEMENT
2017-09-08 13:54 ` Ard Biesheuvel
2017-09-08 14:28 ` Ard Biesheuvel
2017-09-08 14:33 ` Gregory CLEMENT
2017-09-08 14:48 ` Ard Biesheuvel
2017-09-08 14:56 ` Gregory CLEMENT
2017-09-08 14:57 ` Ard Biesheuvel
2017-09-08 15:11 ` Ard Biesheuvel
2017-09-08 15:17 ` Gregory CLEMENT
2017-09-08 15:18 ` Ard Biesheuvel
2017-06-29 8:18 ` [PATCH v2 6/7] arm: compressed: put zImage header and EFI header in dedicated section Ard Biesheuvel
2017-06-29 8:18 ` Ard Biesheuvel [this message]
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=20170629081849.15081-8-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).