x86/build: make linking work again with ld incapable of generating build ID

The retaining of .note.* in a PT_NOTE segment requires a matching
program header to be present in the first place. Drop the respective
conditional and adjust mkelf32 to deal with (ignore) the potentially
present but empty extra segment (but have the new code be generic by
dropping any excess trailing entirely empty segments).

Fixes: dedb0aa42c ("x86/build: use --orphan-handling linker option if available")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2022-04-22 14:56:23 +02:00
1 parent c8a25eb617
commit 54279f87ec
2 files changed
+13 -2

No files matched your search

+13
View File
@@ -320,6 +320,19 @@ int main(int argc, char **argv)
(int)in64_ehdr.e_phentsize, (int)sizeof(in64_phdr));
return 1;
}
/* Ignore entirely empty trailing program headers. */
while ( in64_ehdr.e_phnum > num_phdrs )
{
(void)lseek(infd,
in64_ehdr.e_phoff + in64_ehdr.e_phnum * sizeof(in64_phdr),
SEEK_SET);
do_read(infd, &in64_phdr, sizeof(in64_phdr));
endianadjust_phdr64(&in64_phdr);
if ( in64_phdr.p_memsz )
break;
--in64_ehdr.e_phnum;
}
if ( in64_ehdr.e_phnum != num_phdrs )
{
fprintf(stderr, "Expect precisly %d program header; found %d.\n",
-2
View File
@@ -40,9 +40,7 @@ OUTPUT_ARCH(i386:x86-64)
PHDRS
{
text PT_LOAD ;
#if defined(BUILD_ID) || defined(CONFIG_PVH_GUEST)
note PT_NOTE ;
#endif
}
#define PHDR(x) :x
#else
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.