This commit is contained in:
parent
1b3d4ace7e
commit
3100679c90
179
makedumpfile-fix-64bit-on-32bit
Normal file
179
makedumpfile-fix-64bit-on-32bit
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
From: Bernhard Walle <bwalle@suse.de>
|
||||||
|
Subject: [PATCH] Fix vmcoreinfo generation on 32bit hosts for 64bit kernels
|
||||||
|
|
||||||
|
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 <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -937,11 +938,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;
|
||||||
|
@@ -1900,7 +1901,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;
|
||||||
|
|
||||||
|
@@ -1919,7 +1920,7 @@ get_str_osrelease_from_vmlinux()
|
||||||
|
dwarf_info.vmlinux_name, 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;
|
||||||
|
}
|
||||||
|
@@ -5431,19 +5432,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)
|
||||||
|
@@ -790,39 +790,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 {
|
@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Dec 10 18:23:53 CET 2007 - bwalle@suse.de
|
||||||
|
|
||||||
|
- Fix generation of vmcoreinfo for ELF64 kernels on 32bit machines
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Nov 29 13:41:09 CET 2007 - bwalle@suse.de
|
Thu Nov 29 13:41:09 CET 2007 - bwalle@suse.de
|
||||||
|
|
||||||
|
@ -15,12 +15,13 @@ BuildRequires: gcc-c++ libdw-devel libdw1 libelf-devel libelf0 libelf1 zlib-dev
|
|||||||
%define elfutils_version 0.124
|
%define elfutils_version 0.124
|
||||||
License: GPL v2 or later
|
License: GPL v2 or later
|
||||||
Version: 1.2.3
|
Version: 1.2.3
|
||||||
Release: 1
|
Release: 4
|
||||||
Summary: Partial kernel dump
|
Summary: Partial kernel dump
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
Url: https://sourceforge.net/projects/makedumpfile/
|
Url: https://sourceforge.net/projects/makedumpfile/
|
||||||
Source: makedumpfile-%{version}.tar.bz2
|
Source: makedumpfile-%{version}.tar.bz2
|
||||||
Patch: makedumpfile-coptflags.diff
|
Patch: makedumpfile-coptflags.diff
|
||||||
|
Patch1: makedumpfile-fix-64bit-on-32bit
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -38,6 +39,7 @@ Authors:
|
|||||||
%prep
|
%prep
|
||||||
%setup -n makedumpfile -q
|
%setup -n makedumpfile -q
|
||||||
%patch -p1
|
%patch -p1
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make COPTFLAGS="$RPM_OPT_FLAGS"
|
make COPTFLAGS="$RPM_OPT_FLAGS"
|
||||||
@ -59,6 +61,8 @@ install -c -m 0644 makedumpfile.8 $RPM_BUILD_ROOT%{_mandir}/man8
|
|||||||
/bin/*
|
/bin/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 10 2007 - bwalle@suse.de
|
||||||
|
- Fix generation of vmcoreinfo for ELF64 kernels on 32bit machines
|
||||||
* Thu Nov 29 2007 - bwalle@suse.de
|
* Thu Nov 29 2007 - bwalle@suse.de
|
||||||
- updated to 1.2.3
|
- updated to 1.2.3
|
||||||
o Add the filtering feature for free_pages of linux-2.6.24.
|
o Add the filtering feature for free_pages of linux-2.6.24.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user