[coreboot-gerrit] Patch set updated for coreboot: elfwriter: Fix multi-phdrs ELFs parsing

Antonello Dettori (dev@dettori.io) gerrit at coreboot.org
Thu Jun 16 17:30:20 CEST 2016


Antonello Dettori (dev at dettori.io) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15215

-gerrit

commit 5fce30164e0a6169dd5d1295a700779d34922fef
Author: Antonello Dettori <dettori.an at gmail.com>
Date:   Thu Jun 16 13:40:24 2016 +0200

    elfwriter: Fix multi-phdrs ELFs parsing
    
    Allow to write multiple phdrs, one for each non-consecutive section
    of the ELF.
    Previously it only worked for ELFs contaning a single
    program header.
    
    Change-Id: If6f95e999373a0cab4414b811e8ced4c93c67c30
    Signed-off-by: Antonello Dettori <dev at dettori.io>
---
 util/cbfstool/elfheaders.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c
index e068d38..87b675c 100644
--- a/util/cbfstool/elfheaders.c
+++ b/util/cbfstool/elfheaders.c
@@ -958,6 +958,7 @@ static void write_phdrs(struct elf_writer *ew, struct buffer *phdrs)
 	Elf64_Half i;
 	Elf64_Phdr phdr;
 	size_t num_written = 0;
+	size_t num_needs_write = 0;
 
 	for (i = 0; i < ew->num_secs; i++) {
 		struct elf_writer_section *sec = &ew->sections[i];
@@ -967,7 +968,7 @@ static void write_phdrs(struct elf_writer *ew, struct buffer *phdrs)
 
 		if (!section_consecutive(ew, i)) {
 			/* Write out previously set phdr. */
-			if (num_written != 0) {
+			if (num_needs_write != num_written) {
 				phdr_write(ew, phdrs, &phdr);
 				num_written++;
 			}
@@ -983,6 +984,8 @@ static void write_phdrs(struct elf_writer *ew, struct buffer *phdrs)
 			if (sec->shdr.sh_flags & SHF_WRITE)
 				phdr.p_flags |= PF_W;
 			phdr.p_align = sec->shdr.sh_addralign;
+			num_needs_write++;
+
 		} else {
 			/* Accumulate file size and memsize. The assumption
 			 * is that each section is either NOBITS or full
@@ -998,7 +1001,7 @@ static void write_phdrs(struct elf_writer *ew, struct buffer *phdrs)
 	}
 
 	/* Write out the last phdr. */
-	if (num_written != ew->ehdr.e_phnum)
+	if (num_needs_write != num_written)
 		phdr_write(ew, phdrs, &phdr);
 }
 



More information about the coreboot-gerrit mailing list