On Fri, 12 Mar 2021 17:42:35 +0100 Heinrich Schuchardt <xypron.g...@gmx.de> wrote:
> On 12.03.21 11:34, Marek Behún wrote: > > When linking with LTO, the compiler complains about type mismatch of > > variables `__efi_runtime_start`, `__efi_runtime_stop`, > > `__efi_runtime_rel_start` and `__efi_runtime_rel_stop`: > > > > include/efi_loader.h:218:21: warning: type of ‘__efi_runtime_start’ > > does not match original > > declaration [-Wlto-type-mismatch] > > 218 | extern unsigned int __efi_runtime_start, __efi_runtime_stop; > > | ^ > > arch/sandbox/lib/sections.c:7:6: note: ‘__efi_runtime_start’ was > > previously declared here > > 7 | char __efi_runtime_start[0] __attribute__((section(".__efi_run > > | ^ > > > > Change the type to char[] in include/efi_loader.h. > > > > Signed-off-by: Marek Behún <marek.be...@nic.cz> > > Reviewed-by: Bin Meng <bmeng...@gmail.com> > > This patch leaves us with definition differences: > > We have: > > arch/arm/lib/sections.c:31: > char __efi_runtime_start[0] > __attribute__((section(".__efi_runtime_start"))); > > arch/x86/lib/sections.c:6:char __efi_runtime_start[0] > __attribute__((section(".__efi_runtime_start"))); > > We should use [] everywhere. [0] was needed by elder GCC versions. No, these two things are different: in the header file we have an extern declaration, while in the sections.c files those are definitions. We cannot use char __efi_runtime_start[] for definition, the compiler will complain: warning: array ‘__efi_runtime_start’ assumed to have one element On the other hand the sections.c file explains why those symbols need to be declared in a C file and why a 0-size array is chosen. Marek