[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] x86/build: make linking work again with ld incapable of generating build ID



commit 54279f87ecbcb3eab45fbdd52f44c1be998a9ab3
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri Apr 22 14:56:23 2022 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Apr 22 14:56:23 2022 +0200

    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: dedb0aa42c6d ("x86/build: use --orphan-handling linker option if 
available")
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
 xen/arch/x86/boot/mkelf32.c | 13 +++++++++++++
 xen/arch/x86/xen.lds.S      |  2 --
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/xen/arch/x86/boot/mkelf32.c b/xen/arch/x86/boot/mkelf32.c
index bcbde1a056..3d639c2e08 100644
--- a/xen/arch/x86/boot/mkelf32.c
+++ b/xen/arch/x86/boot/mkelf32.c
@@ -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",
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index 68501c7186..6e4abbc1ce 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -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
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.