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

Reply via email to