* Use the e_type field instead of trying to guess whether we’re

dealing with an executable or dynamic library.  Fixes NIXPKGS-98.
This commit is contained in:
Eelco Dolstra
2009-06-16 15:34:12 +00:00
parent ecb2b0c96f
commit fc79f8a85a

View File

@@ -579,7 +579,7 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
/* Add a segment that maps the replaced sections and program
headers into memory.. */
headers into memory. */
phdrs.resize(rdi(hdr->e_phnum) + 1);
wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
@@ -725,13 +725,13 @@ void ElfFile<ElfFileParamNames>::rewriteSections()
debug("replacing section `%s' with size %d\n",
i->first.c_str(), i->second.size());
if (!findSection2(".interp")) {
debug("no .interp section; this is a dynamic library\n");
if (rdi(hdr->e_type) == ET_DYN) {
debug("this is a dynamic library\n");
rewriteSectionsLibrary();
} else {
debug("found .interp section; this is an executable\n");
} else if (rdi(hdr->e_type) == ET_EXEC) {
debug("this is an executable\n");
rewriteSectionsExecutable();
}
} else error("unknown ELF type");
}