[PATCH v2 2/2] arm64: efi: add vmlinux debug link to the Image binary
Ard Biesheuvel
ard.biesheuvel at linaro.org
Wed Jan 25 03:45:16 PST 2017
On 25 January 2017 at 10:39, Ard Biesheuvel <ard.biesheuvel at linaro.org> wrote:
> When building with debugging symbols, take the absolute path to the
> vmlinux binary and add it to the special PE/COFF debug table entry.
>
> These entries are used internally by EDK2 based* debug builds of UEFI
> to populate the DebugImageInfo table, which can be used by debuggers
> as well as by the OS itself to retrieve information about all loaded
> PE/COFF executables. This is highly useful for source level debugging
> of the UEFI stub.
>
> * for AArch64, this probably means all of them
>
> Cc: Matt Fleming <matt at codeblueprint.co.uk>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> ---
> arch/arm64/kernel/Makefile | 4 +++
> arch/arm64/kernel/head.S | 34 +++++++++++++++++++-
> arch/arm64/kernel/image.h | 3 ++
> 3 files changed, 40 insertions(+), 1 deletion(-)
>
If desired, I can simplify this patch somewhat, i.e., drop the image.h
change, and reduce the visibility of efi_debug_entry
> diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
> index 7d66bbaafc0c..6dbc0e5527f5 100644
> --- a/arch/arm64/kernel/Makefile
> +++ b/arch/arm64/kernel/Makefile
> @@ -55,3 +55,7 @@ obj-y += $(arm64-obj-y) vdso/ probes/
> obj-m += $(arm64-obj-m)
> head-y := head.o
> extra-y += $(head-y) vmlinux.lds
> +
> +ifeq ($(CONFIG_EFI)$(CONFIG_DEBUG_INFO),yy)
> +AFLAGS_head.o += -DVMLINUX_PATH="\"$(shell readlink -f $(objtree)/vmlinux)\""
> +endif
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index 4b1abac3485a..b462ab1f11ef 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -149,7 +149,7 @@ extra_header_fields:
> .quad 0 // SizeOfHeapReserve
> .quad 0 // SizeOfHeapCommit
> .long 0 // LoaderFlags
> - .long 0x6 // NumberOfRvaAndSizes
> + .long (section_table - .) / 8 // NumberOfRvaAndSizes
>
> .quad 0 // ExportTable
> .quad 0 // ImportTable
> @@ -158,6 +158,11 @@ extra_header_fields:
> .quad 0 // CertificationTable
> .quad 0 // BaseRelocationTable
>
> +#ifdef CONFIG_DEBUG_INFO
> + .long efi_debug_table - _head // DebugTable
> + .long efi_debug_table_size
> +#endif
> +
> // Section table
> section_table:
>
> @@ -204,6 +209,33 @@ section_table:
> */
> .align 12
> efi_header_end:
> +
> +#ifdef CONFIG_DEBUG_INFO
> + __INITDATA
> +
> +efi_debug_table:
> + // EFI_IMAGE_DEBUG_DIRECTORY_ENTRY
> + .long 0 // Characteristics
> + .long 0 // TimeDateStamp
> + .short 0 // MajorVersion
> + .short 0 // MinorVersion
> + .long 2 // Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW
> + .long efi_debug_entry_size // SizeOfData
> + .long efi_debug_entry_offset // RVA
> + .long efi_debug_entry_offset // FileOffset
> +
> +ENTRY(efi_debug_entry)
> + // EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY
> + .long 0x3031424E // Signature
> + .long 0 // Unknown
> + .long 0 // Unknown2
> + .long 0 // Unknown3
> +
> + .asciz VMLINUX_PATH
> +
> + .set efi_debug_entry_size, . - efi_debug_entry
> + .set efi_debug_table_size, . - efi_debug_table
> +#endif
> #endif
>
> __INIT
> diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
> index c7fcb232fe47..ad5406f011c2 100644
> --- a/arch/arm64/kernel/image.h
> +++ b/arch/arm64/kernel/image.h
> @@ -116,6 +116,9 @@ __efistub__end = KALLSYMS_HIDE(_end);
> __efistub__edata = KALLSYMS_HIDE(_edata);
> __efistub_screen_info = KALLSYMS_HIDE(screen_info);
>
> +#ifdef CONFIG_DEBUG_INFO
> +efi_debug_entry_offset = efi_debug_entry - _text;
> +#endif
> #endif
>
> #endif /* __ASM_IMAGE_H */
> --
> 2.7.4
>
More information about the linux-arm-kernel
mailing list