changeset 9fb150de362e in /z/repo/gem5 details: http://repo.gem5.org/gem5?cmd=changeset;node=9fb150de362e description: Loader: Handle bad section names when loading an ELF file.
If there's a problem when reading the section names from a supposed ELF file, this change makes gem5 print an error message as returned by libelf and die. Previously these sorts of errors would make gem5 segfault when it tried to access the section name through a NULL pointer. diffstat: src/base/loader/elf_object.cc | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-) diffs (30 lines): diff -r 931ef19535e0 -r 9fb150de362e src/base/loader/elf_object.cc --- a/src/base/loader/elf_object.cc Sun Jun 12 23:51:59 2011 -0700 +++ b/src/base/loader/elf_object.cc Sun Jun 12 23:52:21 2011 -0700 @@ -266,12 +266,20 @@ gelf_getshdr(section, &shdr); char * secName = elf_strptr(elf, ehdr.e_shstrndx, shdr.sh_name); - if (!strcmp(".text", secName)) { - textSecStart = shdr.sh_addr; - } else if (!strcmp(".data", secName)) { - dataSecStart = shdr.sh_addr; - } else if (!strcmp(".bss", secName)) { - bssSecStart = shdr.sh_addr; + if (secName) { + if (!strcmp(".text", secName)) { + textSecStart = shdr.sh_addr; + } else if (!strcmp(".data", secName)) { + dataSecStart = shdr.sh_addr; + } else if (!strcmp(".bss", secName)) { + bssSecStart = shdr.sh_addr; + } + } else { + Elf_Error errorNum = (Elf_Error)elf_errno(); + if (errorNum != ELF_E_NONE) { + const char *errorMessage = elf_errmsg(errorNum); + fatal("Error from libelf: %s.\n", errorMessage); + } } section = elf_getscn(elf, ++secIdx); _______________________________________________ gem5-dev mailing list gem5-dev@m5sim.org http://m5sim.org/mailman/listinfo/gem5-dev