LLVM ld seems to require section names to be quoted at both definition and when referencing them for a match to happen, or else we get the following errors:
ld: error: xen.lds:45: undefined section ".text" ld: error: xen.lds:69: undefined section ".rodata" ld: error: xen.lds:104: undefined section ".note.gnu.build-id" [...] The original fix for GNU ld 2.37 only quoted the section name when referencing it in the ADDR function. Fix by also quoting the section names when declaring them. Fixes: 58ad654ebce7 ("x86: work around build issue with GNU ld 2.37") Reported-by: Andrew Cooper <andrew.coop...@citrix.com> Signed-off-by: Roger Pau Monné <roger....@citrix.com> --- This seems to make all versions that we test in gitlab happy: https://gitlab.com/xen-project/people/royger/xen/-/pipelines/370610794 Plus the FreeBSD Cirrus-CI: https://cirrus-ci.com/build/6690836768358400 I'm slightly worried that LLVM ld requires quotes to be present always in order to match, but I can confirm such quotes are not present in the sections names in the output binary. --- xen/arch/x86/xen.lds.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index 955d5cf4a0..11b1da2154 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -18,7 +18,7 @@ ENTRY(efi_start) #else /* !EFI */ #define FORMAT "elf64-x86-64" -#define DECL_SECTION(x) x : AT(ADDR(#x) - __XEN_VIRT_START) +#define DECL_SECTION(x) #x : AT(ADDR(#x) - __XEN_VIRT_START) ENTRY(start_pa) -- 2.33.0