Sorry for the delay. I'm return back to this issue. Here is the problem:
* clang with -mretpoline generates weak __llvm_retpoline_* symbols in every GRUB unit/module * dependency generator (genmoddep.awk) incorrectly treats these common symbols as duplicate module-owned symbols ``` ... | mv syminfo.lst.new syminfo.lst | cat syminfo.lst | sort | gawk -f ../../grub-2.12/grub-core/genmoddep.awk > moddep.lst || (rm -f moddep.lst; exit 1) | __llvm_retpoline_eax in adler32 is duplicated in acpi | __llvm_retpoline_ecx in adler32 is duplicated in acpi | __llvm_retpoline_edi in adler32 is duplicated in acpi | __llvm_retpoline_edx in adler32 is duplicated in acpi | __llvm_retpoline_eax in affs is duplicated in adler32 | __llvm_retpoline_ecx in affs is duplicated in adler32 | __llvm_retpoline_edi in affs is duplicated in adler32 | __llvm_retpoline_edx in affs is duplicated in adler32 | __llvm_retpoline_eax in afs is duplicated in affs | __llvm_retpoline_ecx in afs is duplicated in affs | __llvm_retpoline_edi in afs is duplicated in affs | __llvm_retpoline_edx in afs is duplicated in affs ... | __llvm_retpoline_eax in zstd is duplicated in zfsinfo | __llvm_retpoline_ecx in zstd is duplicated in zfsinfo | __llvm_retpoline_edi in zstd is duplicated in zfsinfo | __llvm_retpoline_edx in zstd is duplicated in zfsinfo | make[3]: *** [Makefile:51201: moddep.lst] Error 1 ``` Regards, Oleksiy ________________________________ From: Daniel Kiper <[email protected]> Sent: Thursday, February 22, 2024 16:21 To: Oleksiy Obitotskyi -X (oobitots - GLOBALLOGIC INC at Cisco) <[email protected]> Cc: [email protected] <[email protected]> Subject: Re: Failed to build with "-mretpoline" Hi, On Fri, Feb 09, 2024 at 10:48:24AM +0000, Oleksiy Obitotskyi -X (oobitots - GLOBALLOGIC INC at Cisco) via Grub-devel wrote: > Hi, > > We are bulding grub with clang that use -mretpoline option. This leads to > symbols __llvm_retpoline_[eax/ecx/edx, etc.] generated into binaries. And > caused duplicates error during moddep.lst creation. > I'm not sure if this fix will be a bit project specific? > > diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk > index 2474363..f859854 100644 > --- a/grub-core/genmoddep.awk > +++ b/grub-core/genmoddep.awk > @@ -18,7 +18,7 @@ BEGIN { > { > if ($1 == "defined") { > - if ($3 !~ /^\.refptr\./ && $3 in symtab) { > + if ($3 !~ /__llvm_retpoline_.*/ && $3 !~ /^\.refptr\./ && $3 in symtab) { > printf "%s in %s is duplicated in %s\n", $3, $2, symtab[$3] >"/dev/stderr"; > error++; > } Could you explain why do you use -mretpoline to compile GRUB? What is your use case? Daniel
_______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
