diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 51c304b2..d02cd941 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -193,7 +193,9 @@ PackLinuxElf::addStubEntrySections(Filter const *) : M_IS_NRV2B(ph.method) ? "NRV_HEAD,NRV2B,NRV_TAIL" : M_IS_LZMA(ph.method) ? "LZMA_ELF00,+80C,LZMA_DEC20,LZMA_DEC30" : NULL), NULL); - addLoader("CFLUSH,ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL); + if (hasLoaderSection("CFLUSH")) + addLoader("CFLUSH"); + addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL); } diff --git a/src/p_mach.cpp b/src/p_mach.cpp index a986b308..6dd774a3 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -104,7 +104,9 @@ PackMachBase::addStubEntrySections(Filter const *) : M_IS_NRV2B(ph.method) ? "NRV_HEAD,NRV2B,NRV_TAIL" : M_IS_LZMA(ph.method) ? "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30" : NULL), NULL); - addLoader("CFLUSH,ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL); + if (hasLoaderSection("CFLUSH")) + addLoader("CFLUSH"); + addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL); } void PackMachI386::addStubEntrySections(Filter const *ft) diff --git a/src/packer.cpp b/src/packer.cpp index fbd706dc..3bda2cc3 100644 --- a/src/packer.cpp +++ b/src/packer.cpp @@ -1121,6 +1121,11 @@ int Packer::getLoaderSize() const return size; } +bool Packer::hasLoaderSection(const char *name) const +{ + void *section = linker->findSection(name, false); + return section != NULL; +} int Packer::getLoaderSection(const char *name, int *slen) const { diff --git a/src/packer.h b/src/packer.h index d0607faf..e0b91f0b 100644 --- a/src/packer.h +++ b/src/packer.h @@ -240,6 +240,7 @@ protected: #else void __acc_cdecl_va addLoaderVA(const char *s, ...); #endif + virtual bool hasLoaderSection(const char *name) const; virtual int getLoaderSection(const char *name, int *slen=NULL) const; virtual int getLoaderSectionStart(const char *name, int *slen=NULL) const;