This bug fixes the generation of vmcoreinfo files on 32bit hosts for ELF64
files, i.e. 64bit kernels. The concrete problem was PPC64 which is built in a
32bit environment at SUSE.


Signed-off-by: Bernhard Walle <[EMAIL PROTECTED]>

---
 makedumpfile.c |   37 ++++++++++++++++++-----------------
 makedumpfile.h |   60 ++++++++++++++++++++++++++++-----------------------------
 2 files changed, 49 insertions(+), 48 deletions(-)

--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -123,7 +123,7 @@ vaddr_to_offset_general(unsigned long lo
  * It is useful at few calls like get_str_osrelease_from_vmlinux().
  */
 off_t
-vaddr_to_offset_slow(int fd, char *filename, unsigned long vaddr)
+vaddr_to_offset_slow(int fd, char *filename, unsigned long long vaddr)
 {
        off_t offset = 0;
        int i, phnum, num_load, flag_elf64, elf_format;
@@ -170,6 +170,7 @@ vaddr_to_offset_slow(int fd, char *filen
                        break;
                }
        }
+
        return offset;
 }
 
@@ -970,11 +971,11 @@ out:
        return ret;
 }
 
-unsigned long
+unsigned long long
 get_symbol_addr(char *symname)
 {
        int i;
-       unsigned long symbol = NOT_FOUND_SYMBOL;
+       unsigned long long symbol = NOT_FOUND_SYMBOL;
        Elf *elfd = NULL;
        GElf_Shdr shdr;
        GElf_Sym sym;
@@ -1949,7 +1950,7 @@ int
 get_str_osrelease_from_vmlinux()
 {
        struct utsname system_utsname;
-       unsigned long utsname;
+       unsigned long long utsname;
        off_t offset;
        const off_t failed = (off_t)-1;
 
@@ -1968,7 +1969,7 @@ get_str_osrelease_from_vmlinux()
            dwarf_info.name_debuginfo, utsname);
 
        if (!offset) {
-               ERRMSG("Can't convert vaddr (%lx) of utsname to an offset.\n",
+               ERRMSG("Can't convert vaddr (%llx) of utsname to an offset.\n",
                    utsname);
                return FALSE;
        }
@@ -5684,19 +5685,19 @@ show_data_xen()
         * Show data for debug
         */
        MSG("\n");
-       MSG("SYMBOL(dom_xen): %lx\n", SYMBOL(dom_xen));
-       MSG("SYMBOL(dom_io): %lx\n", SYMBOL(dom_io));
-       MSG("SYMBOL(domain_list): %lx\n", SYMBOL(domain_list));
-       MSG("SYMBOL(xen_heap_start): %lx\n", SYMBOL(xen_heap_start));
-       MSG("SYMBOL(frame_table): %lx\n", SYMBOL(frame_table));
-       MSG("SYMBOL(alloc_bitmap): %lx\n", SYMBOL(alloc_bitmap));
-       MSG("SYMBOL(max_page): %lx\n", SYMBOL(max_page));
-       MSG("SYMBOL(pgd_l2): %lx\n", SYMBOL(pgd_l2));
-       MSG("SYMBOL(pgd_l3): %lx\n", SYMBOL(pgd_l3));
-       MSG("SYMBOL(pgd_l4): %lx\n", SYMBOL(pgd_l4));
-       MSG("SYMBOL(xenheap_phys_end): %lx\n", SYMBOL(xenheap_phys_end));
-       MSG("SYMBOL(xen_pstart): %lx\n", SYMBOL(xen_pstart));
-       MSG("SYMBOL(frametable_pg_dir): %lx\n", SYMBOL(frametable_pg_dir));
+       MSG("SYMBOL(dom_xen): %llx\n", SYMBOL(dom_xen));
+       MSG("SYMBOL(dom_io): %llx\n", SYMBOL(dom_io));
+       MSG("SYMBOL(domain_list): %llx\n", SYMBOL(domain_list));
+       MSG("SYMBOL(xen_heap_start): %llx\n", SYMBOL(xen_heap_start));
+       MSG("SYMBOL(frame_table): %llx\n", SYMBOL(frame_table));
+       MSG("SYMBOL(alloc_bitmap): %llx\n", SYMBOL(alloc_bitmap));
+       MSG("SYMBOL(max_page): %llx\n", SYMBOL(max_page));
+       MSG("SYMBOL(pgd_l2): %llx\n", SYMBOL(pgd_l2));
+       MSG("SYMBOL(pgd_l3): %llx\n", SYMBOL(pgd_l3));
+       MSG("SYMBOL(pgd_l4): %llx\n", SYMBOL(pgd_l4));
+       MSG("SYMBOL(xenheap_phys_end): %llx\n", SYMBOL(xenheap_phys_end));
+       MSG("SYMBOL(xen_pstart): %llx\n", SYMBOL(xen_pstart));
+       MSG("SYMBOL(frametable_pg_dir): %llx\n", SYMBOL(frametable_pg_dir));
 
        MSG("SIZE(page_info): %ld\n", SIZE(page_info));
        MSG("OFFSET(page_info.count_info): %ld\n", 
OFFSET(page_info.count_info));
--- a/makedumpfile.h
+++ b/makedumpfile.h
@@ -258,7 +258,7 @@ do { \
 #define WRITE_SYMBOL(str_symbol, symbol) \
 do { \
        if (SYMBOL(symbol) != NOT_FOUND_SYMBOL) { \
-               fprintf(info->file_vmcoreinfo, "%s%lx\n", \
+               fprintf(info->file_vmcoreinfo, "%s%llx\n", \
                    STR_SYMBOL(str_symbol), SYMBOL(symbol)); \
        } \
 } while (0)
@@ -802,39 +802,39 @@ struct vm_table {
 extern struct vm_table         vt;
 
 struct symbol_table {
-       unsigned long   mem_map;
-       unsigned long   mem_section;
-       unsigned long   pkmap_count;
-       unsigned long   pkmap_count_next;
-       unsigned long   system_utsname;
-       unsigned long   init_uts_ns;
-       unsigned long   _stext;
-       unsigned long   swapper_pg_dir;
-       unsigned long   init_level4_pgt;
-       unsigned long   phys_base;
-       unsigned long   node_online_map;
-       unsigned long   node_states;
-       unsigned long   node_memblk;
-       unsigned long   node_data;
-       unsigned long   pgdat_list;
-       unsigned long   contig_page_data;
+       unsigned long long      mem_map;
+       unsigned long long      mem_section;
+       unsigned long long      pkmap_count;
+       unsigned long long      pkmap_count_next;
+       unsigned long long      system_utsname;
+       unsigned long long      init_uts_ns;
+       unsigned long long      _stext;
+       unsigned long long      swapper_pg_dir;
+       unsigned long long      init_level4_pgt;
+       unsigned long long      phys_base;
+       unsigned long long      node_online_map;
+       unsigned long long      node_states;
+       unsigned long long      node_memblk;
+       unsigned long long      node_data;
+       unsigned long long      pgdat_list;
+       unsigned long long      contig_page_data;
 
        /*
         * for Xen extraction
         */
-       unsigned long   dom_xen;
-       unsigned long   dom_io;
-       unsigned long   domain_list;
-       unsigned long   frame_table;
-       unsigned long   xen_heap_start;
-       unsigned long   pgd_l2;
-       unsigned long   pgd_l3;
-       unsigned long   pgd_l4;
-       unsigned long   xenheap_phys_end;
-       unsigned long   xen_pstart;
-       unsigned long   frametable_pg_dir;
-       unsigned long   max_page;
-       unsigned long   alloc_bitmap;
+       unsigned long long      dom_xen;
+       unsigned long long      dom_io;
+       unsigned long long      domain_list;
+       unsigned long long      frame_table;
+       unsigned long long      xen_heap_start;
+       unsigned long long      pgd_l2;
+       unsigned long long      pgd_l3;
+       unsigned long long      pgd_l4;
+       unsigned long long      xenheap_phys_end;
+       unsigned long long      xen_pstart;
+       unsigned long long      frametable_pg_dir;
+       unsigned long long      max_page;
+       unsigned long long      alloc_bitmap;
 };
 
 struct size_table {

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

Reply via email to