Apparently this never happens, but the current code seems excessively loose.

1) die if it does happen
2) initialise offset to make gcc happy.

# ia64-unknown-linux-gnu-gcc --version
ia64-unknown-linux-gnu-gcc (GCC) 3.4.5
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# make
kexec/arch/ia64/kexec-elf-ia64.c: In function `move_loaded_segments':
kexec/arch/ia64/kexec-elf-ia64.c:102: warning: 'offset' might be used
uninitialized in this function

Signed-off-by: Simon Horman <[email protected]>

Index: kexec-tools/kexec/arch/ia64/kexec-elf-ia64.c
===================================================================
--- kexec-tools.orig/kexec/arch/ia64/kexec-elf-ia64.c   2010-02-01 
23:07:19.000000000 +1100
+++ kexec-tools/kexec/arch/ia64/kexec-elf-ia64.c        2010-02-01 
23:07:22.000000000 +1100
@@ -99,15 +99,19 @@ void elf_ia64_usage(void)
 void move_loaded_segments(struct mem_ehdr *ehdr, unsigned long addr)
 {
        unsigned i;
-       long offset;
+       long offset = 0;
+       int found = 0;
        struct mem_phdr *phdr;
        for(i = 0; i < ehdr->e_phnum; i++) {
                phdr = &ehdr->e_phdr[i];
                if (phdr->p_type == PT_LOAD) {
                        offset = addr - phdr->p_paddr;
+                       found++;
                        break;
                }
        }
+       if (!found)
+               die("move_loaded_segments: no PT_LOAD region 0x%016x\n", addr);
        ehdr->e_entry += offset;
        for(i = 0; i < ehdr->e_phnum; i++) {
                phdr = &ehdr->e_phdr[i];


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to