[PATCH v4] efi: arm64: Add vmlinux debug link to the Image binary

Ard Biesheuvel ard.biesheuvel at linaro.org
Fri Feb 3 06:50:40 PST 2017


On 2 February 2017 at 18:36, Ard Biesheuvel <ard.biesheuvel at linaro.org> wrote:
> On 2 February 2017 at 18:30, Will Deacon <will.deacon at arm.com> wrote:
>> Hi Ard,
>>
>> On Thu, Feb 02, 2017 at 05:33:19PM +0000, Ard Biesheuvel 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.
>>> This allows a debug EFI build to find the vmlinux binary, which is
>>> very helpful in debugging, given that the offset where the Image is
>>> first loaded by EFI is highly unpredictable.
>>>
>>> On implementations of UEFI that choose to implement it, this
>>> information is exposed via the EFI debug support table, which is a UEFI
>>> configuration table that is accessible both by the firmware at boot time
>>> and by the OS at runtime, and lists all PE/COFF images loaded by the
>>> system.
>>>
>>> The format of the NB10 Codeview entry is based on the definition used
>>> by EDK2, which is our primary reference when it comes to the use of
>>> PE/COFF in the context of UEFI firmware.
>>>
>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
>>> ---
>>> v4: add a separate DEBUG_EFI debug option so that this feature is disabled
>>>     by default
>>>     dropped 1/2 which has been queued already in the EFI tree
>>>     use ASCII rather than an opaque constant for "NB10" signature
>>>
>>>  arch/arm64/Kconfig.debug   |  8 ++++
>>>  arch/arm64/kernel/Makefile |  4 ++
>>>  arch/arm64/kernel/head.S   | 47 +++++++++++++++++++-
>>>  3 files changed, 58 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug
>>> index d1ebd46872fd..f7f38b1aab14 100644
>>> --- a/arch/arm64/Kconfig.debug
>>> +++ b/arch/arm64/Kconfig.debug
>>> @@ -95,6 +95,14 @@ config DEBUG_ALIGN_RODATA
>>>
>>>         If in doubt, say N.
>>>
>>> +config DEBUG_EFI
>>> +     depends on EFI && DEBUG_INFO
>>> +     bool "UEFI debugging"
>>> +     help
>>> +       Enable this option to include EFI specific debugging features into
>>> +       the kernel that are only useful when using a debug build of the
>>> +       UEFI firmware
>>> +
>>
>> I don't much like embedding the absolute host build path in the kernel
>> image, but if that's what the tools expect then so be it.
>>
>>>  source "drivers/hwtracing/coresight/Kconfig"
>>>
>>>  endmenu
>>> diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
>>> index 7d66bbaafc0c..2600c60337ac 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_DEBUG_EFI),y)
>>> +AFLAGS_head.o += -DVMLINUX_PATH="\"$(shell readlink -f $(objtree)/vmlinux)\""
>>> +endif
>>
>> Can we use the Make realpath directive instead of calling out to the shell?
>>
>
> Yep. This works as expected:
>
> diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
> index 2600c60337ac..1606c6b2a280 100644
> --- a/arch/arm64/kernel/Makefile
> +++ b/arch/arm64/kernel/Makefile
> @@ -57,5 +57,5 @@ head-y                                        := head.o
>  extra-y                                        += $(head-y) vmlinux.lds
>
>  ifeq ($(CONFIG_DEBUG_EFI),y)
> -AFLAGS_head.o += -DVMLINUX_PATH="\"$(shell readlink -f $(objtree)/vmlinux)\""
> +AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
>  endif
>
>
>> Do you want me to merge this via arm64?
>>
>
> Yes, please

Should I respin this?



More information about the linux-arm-kernel mailing list