diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index f7de6f72..f1a7b78f 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -3842,8 +3842,15 @@ int PackLinuxElf32::pack2(OutputFile *fo, Filter &ft) if (ft.id < 0x40) { // FIXME: ?? ft.addvalue += asl_delta; } - x.offset += delta; - x.size -= delta; + if (delta == x.size) { // PT_LOAD[0] with ElfXX.Ehdr only + // QBE backend - http://c9x.me/compile/ + hdr_u_len = 0; // no fiddling necessary! + // &ft arg to packExtent will be zero becaue (k != nk_f) + } + else { + x.offset += delta; + x.size -= delta; + } } // compressWithFilters() always assumes a "loader", so would // throw NotCompressible for small .data Extents, which PowerPC @@ -3966,8 +3973,15 @@ int PackLinuxElf64::pack2(OutputFile *fo, Filter &ft) if (ft.id < 0x40) { // FIXME: ?? ft.addvalue += asl_delta; } - x.offset += delta; - x.size -= delta; + if (delta == x.size) { // PT_LOAD[0] with ElfXX.Ehdr only + // QBE backend - http://c9x.me/compile/ + hdr_u_len = 0; // no fiddling necessary! + // &ft arg to packExtent will be zero becaue (k != nk_f) + } + else { + x.offset += delta; + x.size -= delta; + } } // compressWithFilters() always assumes a "loader", so would // throw NotCompressible for small .data Extents, which PowerPC