x86-64, vdso: Fix vDSO build breakage due to empty .rela.dyn
authorJan Beulich <JBeulich@suse.com>
Thu, 3 Jul 2014 14:34:38 +0000 (15:34 +0100)
committerH. Peter Anvin <hpa@linux.intel.com>
Thu, 10 Jul 2014 22:59:56 +0000 (15:59 -0700)
Certain ld versions (observed with 2.20.0) put an empty .rela.dyn
section into shared object files, breaking the assumption on the number
of sections to be copied to the final output. Simply discard any empty
SHT_REL and SHT_RELA sections to address this.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Link: http://lkml.kernel.org/r/53B5861E02000078000204D1@mail.emea.novell.com
Acked-by: Andy Lutomirski <luto@amacapital.net>
Tested-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Tested-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/vdso/vdso2c.h

index df95a2fdff7319821a8c68a905ece1a1be98517b..11b65d4f94140d3523484c714a3735e6d2f718ed 100644 (file)
@@ -93,6 +93,9 @@ static void BITSFUNC(copy_section)(struct BITSFUNC(fake_sections) *out,
        uint64_t flags = GET_LE(&in->sh_flags);
 
        bool copy = flags & SHF_ALLOC &&
+               (GET_LE(&in->sh_size) ||
+                (GET_LE(&in->sh_type) != SHT_RELA &&
+                 GET_LE(&in->sh_type) != SHT_REL)) &&
                strcmp(name, ".altinstructions") &&
                strcmp(name, ".altinstr_replacement");