Hello community, here is the log from the commit of package makedumpfile checked in at Fri Feb 9 01:14:20 CET 2007. -------- --- makedumpfile/makedumpfile.changes 2007-02-05 13:37:51.000000000 +0100 +++ /mounts/work_src_done/STABLE/makedumpfile/makedumpfile.changes 2007-02-08 12:50:14.000000000 +0100 @@ -1,0 +2,6 @@ +Thu Feb 8 12:49:58 CET 2007 - tiwai@suse.de + +- updated to version 1.1.1: + * x86-64 DISCONTIGMEM support + +------------------------------------------------------------------- Old: ---- makedumpfile-1.1.0.tar.bz2 New: ---- makedumpfile-1.1.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ makedumpfile.spec ++++++ --- /var/tmp/diff_new_pack.l30083/_old 2007-02-09 01:14:08.000000000 +0100 +++ /var/tmp/diff_new_pack.l30083/_new 2007-02-09 01:14:08.000000000 +0100 @@ -1,5 +1,5 @@ # -# spec file for package makedumpfile (Version 1.1.0) +# spec file for package makedumpfile (Version 1.1.1) # # Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -14,7 +14,7 @@ BuildRequires: gcc-c++ %define elfutils_version 0.124 License: GNU General Public License (GPL) -Version: 1.1.0 +Version: 1.1.1 Release: 1 Summary: Partial kernel dump Group: System/Kernel @@ -84,6 +84,9 @@ /bin/* %changelog -n makedumpfile +* Thu Feb 08 2007 - tiwai@suse.de +- updated to version 1.1.1: + * x86-64 DISCONTIGMEM support * Mon Feb 05 2007 - tiwai@suse.de - updated to version 1.1.0: * support SSH transfer ++++++ makedumpfile-1.1.0.tar.bz2 -> makedumpfile-1.1.1.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/makedumpfile.c new/makedumpfile/makedumpfile.c --- old/makedumpfile/makedumpfile.c 2007-02-02 10:20:09.000000000 +0100 +++ new/makedumpfile/makedumpfile.c 2007-02-08 10:21:51.000000000 +0100 @@ -16,7 +16,7 @@ /* * TODO - * 1. get the memory management information from the symbol "pgdat_list". + * 1. (ia64) DISCONTIGMEM support. * 2. (i386) fill PT_LOAD headers with appropriate virtual addresses. */ @@ -989,13 +989,10 @@ } static int -get_data_array_length(Dwarf *dwarfd, Dwarf_Die *die) +get_die_type(Dwarf *dwarfd, Dwarf_Die *die, Dwarf_Die *die_type) { - int tag; Dwarf_Attribute attr; Dwarf_Off offset_type, offset_cu; - Dwarf_Die die_type; - Dwarf_Word upper_bound; offset_cu = dwarf_dieoffset(die) - dwarf_cuoffset(die); @@ -1008,11 +1005,25 @@ if (dwarf_formref(&attr, &offset_type) < 0) return FALSE; - if (dwarf_offdie(dwarfd, offset_type + offset_cu, &die_type) == NULL) { + if (dwarf_offdie(dwarfd, offset_type + offset_cu, die_type) == NULL) { ERRMSG("Can't get CU die.\n"); return FALSE; } + return TRUE; +} +static int +get_data_array_length(Dwarf *dwarfd, Dwarf_Die *die) +{ + int tag; + Dwarf_Attribute attr; + Dwarf_Die die_type; + Dwarf_Word upper_bound; + + if (!get_die_type(dwarfd, die, &die_type)) { + ERRMSG("Can't get CU die of DW_AT_type.\n"); + return FALSE; + } tag = dwarf_tag(&die_type); if (tag != DW_TAG_array_type) { /* @@ -1048,6 +1059,23 @@ return TRUE; } +static int +check_array_type(Dwarf *dwarfd, Dwarf_Die *die) +{ + int tag; + Dwarf_Die die_type; + + if (!get_die_type(dwarfd, die, &die_type)) { + ERRMSG("Can't get CU die of DW_AT_type.\n"); + return FALSE; + } + tag = dwarf_tag(&die_type); + if (tag == DW_TAG_array_type) + dwarf_info.array_length = FOUND_ARRAY_TYPE; + + return TRUE; +} + static void search_member(Dwarf *dwarfd, Dwarf_Die *die) { @@ -1119,7 +1147,8 @@ int is_search_symbol(int cmd) { - if (cmd == DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH) + if ((cmd == DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH) + || (cmd == DWARF_INFO_CHECK_SYMBOL_ARRAY_TYPE)) return TRUE; else return FALSE; @@ -1209,6 +1238,9 @@ case DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH: get_data_array_length(dwarfd, die); break; + case DWARF_INFO_CHECK_SYMBOL_ARRAY_TYPE: + check_array_type(dwarfd, die); + break; } } @@ -1346,16 +1378,21 @@ * Get the length of array. */ long -get_array_length(char *name01, char *name02, int get_symbol) +get_array_length(char *name01, char *name02, unsigned int cmd) { - if (get_symbol) { - dwarf_info.cmd = DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH; + switch (cmd) { + case DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH: dwarf_info.symbol_name = name01; - } else { - dwarf_info.cmd = DWARF_INFO_GET_MEMBER_ARRAY_LENGTH; + break; + case DWARF_INFO_CHECK_SYMBOL_ARRAY_TYPE: + dwarf_info.symbol_name = name01; + break; + case DWARF_INFO_GET_MEMBER_ARRAY_LENGTH: dwarf_info.struct_name = name01; dwarf_info.member_name = name02; + break; } + dwarf_info.cmd = cmd; dwarf_info.struct_size = NOT_FOUND_STRUCTURE; dwarf_info.member_offset = NOT_FOUND_STRUCTURE; dwarf_info.array_length = NOT_FOUND_STRUCTURE; @@ -1386,7 +1423,7 @@ SYMBOL_INIT(contig_page_data, "contig_page_data"); if (SYMBOL(node_data) != NOT_FOUND_SYMBOL) - SYMBOL_ARRAY_LENGTH_INIT(node_data, "node_data"); + SYMBOL_ARRAY_TYPE_INIT(node_data, "node_data"); if (SYMBOL(pgdat_list) != NOT_FOUND_SYMBOL) SYMBOL_ARRAY_LENGTH_INIT(pgdat_list, "pgdat_list"); if (SYMBOL(mem_section) != NOT_FOUND_SYMBOL) @@ -1426,6 +1463,10 @@ SIZE_INIT(pglist_data, "pglist_data"); OFFSET_INIT(pglist_data.node_zones, "pglist_data", "node_zones"); OFFSET_INIT(pglist_data.nr_zones, "pglist_data", "nr_zones"); + OFFSET_INIT(pglist_data.node_mem_map, "pglist_data", "node_mem_map"); + OFFSET_INIT(pglist_data.node_start_pfn, "pglist_data","node_start_pfn"); + OFFSET_INIT(pglist_data.node_spanned_pages, "pglist_data", + "node_spanned_pages"); /* * Get offsets of the zone's members. @@ -1472,6 +1513,12 @@ || (OFFSET(page._count) == NOT_FOUND_STRUCTURE) || (OFFSET(page.mapping) == NOT_FOUND_STRUCTURE)) { ret = NOT_FOUND_MEMTYPE; + } else if ((SYMBOL(node_data) != NOT_FOUND_SYMBOL) + && (SIZE(pglist_data) != NOT_FOUND_STRUCTURE) + && (OFFSET(pglist_data.node_mem_map) != NOT_FOUND_STRUCTURE) + && (OFFSET(pglist_data.node_start_pfn) != NOT_FOUND_STRUCTURE) + && (OFFSET(pglist_data.node_spanned_pages) !=NOT_FOUND_STRUCTURE)){ + ret = DISCONTIGMEM; } else if ((SYMBOL(mem_section) != NOT_FOUND_SYMBOL) && (SIZE(mem_section) != NOT_FOUND_STRUCTURE) && (OFFSET(mem_section.section_mem_map) != NOT_FOUND_STRUCTURE) @@ -1572,6 +1619,12 @@ mem_section.section_mem_map); WRITE_MEMBER_OFFSET("pglist_data.node_zones", pglist_data.node_zones); WRITE_MEMBER_OFFSET("pglist_data.nr_zones", pglist_data.nr_zones); + WRITE_MEMBER_OFFSET("pglist_data.node_mem_map", + pglist_data.node_mem_map); + WRITE_MEMBER_OFFSET("pglist_data.node_start_pfn", + pglist_data.node_start_pfn); + WRITE_MEMBER_OFFSET("pglist_data.node_spanned_pages", + pglist_data.node_spanned_pages); WRITE_MEMBER_OFFSET("zone.free_pages", zone.free_pages); WRITE_MEMBER_OFFSET("zone.free_area", zone.free_area); WRITE_MEMBER_OFFSET("zone.spanned_pages", zone.spanned_pages); @@ -1733,6 +1786,11 @@ mem_section.section_mem_map); READ_MEMBER_OFFSET("pglist_data.node_zones", pglist_data.node_zones); READ_MEMBER_OFFSET("pglist_data.nr_zones", pglist_data.nr_zones); + READ_MEMBER_OFFSET("pglist_data.node_mem_map",pglist_data.node_mem_map); + READ_MEMBER_OFFSET("pglist_data.node_start_pfn", + pglist_data.node_start_pfn); + READ_MEMBER_OFFSET("pglist_data.node_spanned_pages", + pglist_data.node_spanned_pages); READ_MEMBER_OFFSET("zone.free_pages", zone.free_pages); READ_MEMBER_OFFSET("zone.free_area", zone.free_area); READ_MEMBER_OFFSET("zone.spanned_pages", zone.spanned_pages); @@ -1748,6 +1806,145 @@ return TRUE; } +/* + * Get the number of online nodes. + */ +int +get_nodes_online(struct DumpInfo *info) +{ + int len, i, j, online; + unsigned long bitbuf, *maskptr; + + if (SYMBOL(node_online_map) == NOT_FOUND_SYMBOL) + return 0; + /* + * FIXME + * Size of node_online_map must be dynamically got from debugging + * information each architecture or each config. + */ + len = SIZEOF_NODE_ONLINE_MAP; + if (!(vt->node_online_map = (unsigned long *)malloc(len))) { + ERRMSG("Can't allocate memory for the node online map. %s\n", + strerror(errno)); + return 0; + } + if (!readmem(info, SYMBOL(node_online_map), vt->node_online_map, len)) { + ERRMSG("Can't get the node online map.\n"); + return 0; + } + vt->node_online_map_len = len/sizeof(unsigned long); + online = 0; + maskptr = (unsigned long *)vt->node_online_map; + for (i = 0; i < vt->node_online_map_len; i++, maskptr++) { + bitbuf = *maskptr; + for (j = 0; j < sizeof(bitbuf) * 8; j++) { + online += bitbuf & 1; + bitbuf = bitbuf >> 1; + } + } + return online; +} + +int +get_numnodes(struct DumpInfo *info) +{ + if (!(vt->numnodes = get_nodes_online(info))) { + vt->numnodes = 1; + } + if (info->flag_debug) { + MSG("\n"); + MSG("num of NODEs : %d\n", vt->numnodes); + MSG("\n"); + } + return TRUE; +} + +int +next_online_node(int first) +{ + int i, j, node; + unsigned long mask, *maskptr; + + /* It cannot occur */ + if ((first/(sizeof(unsigned long) * 8)) >= vt->node_online_map_len) { + ERRMSG("next_online_node: %d is too large!\n", first); + return -1; + } + + maskptr = (unsigned long *)vt->node_online_map; + for (i = node = 0; i < vt->node_online_map_len; i++, maskptr++) { + mask = *maskptr; + for (j = 0; j < (sizeof(unsigned long) * 8); j++, node++) { + if (mask & 1) { + if (node >= first) + return node; + } + mask >>= 1; + } + } + return -1; +} + +unsigned long +next_online_pgdat(struct DumpInfo *info, int node) +{ + unsigned long pgdat; + + /* + * Get the pglist_data structure from symbol "node_data". + * The array number of symbol "node_data" cannot be gotten + * from vmlinux. Instead, check it is DW_TAG_array_type. + */ + if ((SYMBOL(node_data) == NOT_FOUND_SYMBOL) + || (ARRAY_LENGTH(node_data) == NOT_FOUND_STRUCTURE)) + goto pgdat2; + + if (!readmem(info, SYMBOL(node_data) + (node * sizeof(void *)), + &pgdat, sizeof pgdat)) + goto pgdat2; + + if (!is_kvaddr(pgdat)) + goto pgdat2; + + return pgdat; + +pgdat2: + /* + * Get the pglist_data structure from symbol "pgdat_list". + */ + if (SYMBOL(pgdat_list) == NOT_FOUND_SYMBOL) + goto pgdat3; + + else if ((0 < node) + && (ARRAY_LENGTH(pgdat_list) == NOT_FOUND_STRUCTURE)) + goto pgdat3; + + else if ((ARRAY_LENGTH(pgdat_list) != NOT_FOUND_STRUCTURE) + && (ARRAY_LENGTH(pgdat_list) < node)) + goto pgdat3; + + if (!readmem(info, SYMBOL(pgdat_list) + (node * sizeof(void *)), + &pgdat, sizeof pgdat)) + goto pgdat3; + + if (!is_kvaddr(pgdat)) + goto pgdat3; + + return pgdat; + +pgdat3: + /* + * Get the pglist_data structure from symbol "contig_page_data". + */ + if (SYMBOL(contig_page_data) == NOT_FOUND_SYMBOL) + return FALSE; + + if (node != 0) + return FALSE; + + return SYMBOL(contig_page_data); +} + void dump_mem_map(struct DumpInfo *info, unsigned long long pfn_start, unsigned long long pfn_end, unsigned long mem_map, int num_mm) @@ -1793,6 +1990,68 @@ return TRUE; } +int +get_mm_discontigmem(struct DumpInfo *info) +{ + int num_nodes, node; + unsigned long pgdat, mem_map, pfn_start, pfn_end, node_spanned_pages; + + info->num_mem_map = vt->numnodes; + + if ((info->mem_map_data = (struct mem_map_data *) + malloc(sizeof(struct mem_map_data)*info->num_mem_map)) == NULL) { + ERRMSG("Can't allocate memory for the mem_map_data. %s\n", + strerror(errno)); + return FALSE; + } + + /* + * Get the first node_id. + */ + if ((node = next_online_node(0)) < 0) { + ERRMSG("Can't get next online node.\n"); + return FALSE; + } + if (!(pgdat = next_online_pgdat(info, node))) { + ERRMSG("Can't get pgdat list.\n"); + return FALSE; + } + for (num_nodes = 1; num_nodes <= vt->numnodes; num_nodes++) { + if (!readmem(info, pgdat + OFFSET(pglist_data.node_mem_map), + &mem_map, sizeof mem_map)) { + ERRMSG("Can't get mem_map.\n"); + return FALSE; + } + if (!readmem(info, pgdat + OFFSET(pglist_data.node_start_pfn), + &pfn_start, sizeof pfn_start)) { + ERRMSG("Can't get node_start_pfn.\n"); + return FALSE; + } + if (!readmem(info,pgdat+OFFSET(pglist_data.node_spanned_pages), + &node_spanned_pages, sizeof node_spanned_pages)) { + ERRMSG("Can't get node_spanned_pages.\n"); + return FALSE; + } + pfn_end = pfn_start + node_spanned_pages; + dump_mem_map(info, pfn_start, pfn_end, mem_map, num_nodes - 1); + + /* + * Get pglist_data of the next node. + */ + if (num_nodes < vt->numnodes) { + if ((node = next_online_node(node + 1)) < 0) { + ERRMSG("Can't get next online node.\n"); + return FALSE; + } else if (!(pgdat = next_online_pgdat(info, node))) { + ERRMSG("Can't determine pgdat list (node %d).\n", + node); + return FALSE; + } + } + } + return TRUE; +} + unsigned long nr_to_section(struct DumpInfo *info, unsigned long nr, unsigned long *mem_sec) { @@ -1943,6 +2202,14 @@ } ret = get_mm_sparsemem(info); break; + case DISCONTIGMEM: + if (info->flag_debug) { + MSG("\n"); + MSG("Memory type : DISCONTIGMEM\n"); + MSG("\n"); + } + ret = get_mm_discontigmem(info); + break; case FLATMEM: if (info->flag_debug) { MSG("\n"); @@ -1996,6 +2263,9 @@ if (!get_machdep_info(info)) return FALSE; + if (!get_numnodes(info)) + return FALSE; + if (!get_mem_map(info)) return FALSE; @@ -2342,136 +2612,6 @@ return ret; } -/* - * Get the number of online nodes. - */ -int -get_nodes_online(struct DumpInfo *info) -{ - int len, i, j, online; - unsigned long bitbuf, *maskptr; - - if (SYMBOL(node_online_map) == NOT_FOUND_SYMBOL) - return 0; - /* - * FIXME - * Size of node_online_map must be dynamically got from debugging - * information each architecture or each config. - */ - len = SIZEOF_NODE_ONLINE_MAP; - if (!(vt->node_online_map = (unsigned long *)malloc(len))) { - ERRMSG("Can't allocate memory for the node online map. %s\n", - strerror(errno)); - return 0; - } - if (!readmem(info, SYMBOL(node_online_map), vt->node_online_map, len)) { - ERRMSG("Can't get the node online map.\n"); - return 0; - } - vt->node_online_map_len = len/sizeof(unsigned long); - online = 0; - maskptr = (unsigned long *)vt->node_online_map; - for (i = 0; i < vt->node_online_map_len; i++, maskptr++) { - bitbuf = *maskptr; - for (j = 0; j < sizeof(bitbuf) * 8; j++) { - online += bitbuf & 1; - bitbuf = bitbuf >> 1; - } - } - return online; -} - -int -next_online_node(first) -{ - int i, j, node; - unsigned long mask, *maskptr; - - /* It cannot occur */ - if ((first/(sizeof(unsigned long) * 8)) >= vt->node_online_map_len) { - ERRMSG("next_online_node: %d is too large!\n", first); - return -1; - } - - maskptr = (unsigned long *)vt->node_online_map; - for (i = node = 0; i < vt->node_online_map_len; i++, maskptr++) { - mask = *maskptr; - for (j = 0; j < (sizeof(unsigned long) * 8); j++, node++) { - if (mask & 1) { - if (node >= first) - return node; - } - mask >>= 1; - } - } - return -1; -} - -unsigned long -next_online_pgdat(struct DumpInfo *info, int node) -{ - unsigned long pgdat; - - /* - * Get the pglist_data structure from symbol "node_data". - */ - if (SYMBOL(node_data) == NOT_FOUND_SYMBOL) - goto pgdat2; - - else if ((0 < node) - && (ARRAY_LENGTH(node_data) == NOT_FOUND_STRUCTURE)) - goto pgdat2; - - else if ((ARRAY_LENGTH(node_data) != NOT_FOUND_STRUCTURE) - && (ARRAY_LENGTH(node_data) < node)) - goto pgdat2; - - if (!readmem(info, SYMBOL(node_data) + (node * sizeof(void *)), - &pgdat, sizeof pgdat)) - goto pgdat2; - - if (!is_kvaddr(pgdat)) - goto pgdat2; - - return pgdat; - -pgdat2: - /* - * Get the pglist_data structure from symbol "pgdat_list". - */ - if (SYMBOL(pgdat_list) == NOT_FOUND_SYMBOL) - goto pgdat3; - - else if ((0 < node) - && (ARRAY_LENGTH(pgdat_list) == NOT_FOUND_STRUCTURE)) - goto pgdat3; - - else if ((ARRAY_LENGTH(pgdat_list) != NOT_FOUND_STRUCTURE) - && (ARRAY_LENGTH(pgdat_list) < node)) - goto pgdat3; - - if (!readmem(info, SYMBOL(pgdat_list) + (node * sizeof(void *)), - &pgdat, sizeof pgdat)) - goto pgdat3; - - if (!is_kvaddr(pgdat)) - goto pgdat3; - - return pgdat; - -pgdat3: - /* - * Get the pglist_data structure from symbol "contig_page_data". - */ - if (SYMBOL(contig_page_data) == NOT_FOUND_SYMBOL) - return FALSE; - - if (node != 0) - return FALSE; - - return SYMBOL(contig_page_data); -} - unsigned long long page_to_pfn(struct DumpInfo *info, unsigned long page) { @@ -2653,15 +2793,6 @@ int _exclude_free_page(struct DumpInfo *info) { - if (!(vt->numnodes = get_nodes_online(info))) - vt->numnodes = 1; - - if (info->flag_debug) { - MSG("\n"); - MSG("num of NODEs : %d\n", vt->numnodes); - MSG("\n"); - } - if (!dump_memory_nodes(info)) return FALSE; @@ -2757,7 +2888,7 @@ int val, not_found_mem_map; unsigned int i, mm, remain_size; unsigned long mem_map; - unsigned long long pfn, paddr; + unsigned long long pfn, paddr, pfn_mm; unsigned char *page_cache = NULL, *buf = NULL, *pcache; unsigned int _count; unsigned long flags, mapping; @@ -2907,8 +3038,12 @@ } if ((pfn % PGMM_CACHED) == 0) { + if (pfn + PGMM_CACHED < mmd->pfn_end) + pfn_mm = PGMM_CACHED; + else + pfn_mm = mmd->pfn_end - pfn; if (!readmem(info, mem_map, page_cache, - SIZE(page) * PGMM_CACHED)) + SIZE(page) * pfn_mm)) goto out; } pcache = page_cache + ((pfn%PGMM_CACHED) * SIZE(page)); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/makedumpfile.h new/makedumpfile/makedumpfile.h --- old/makedumpfile/makedumpfile.h 2007-02-02 10:20:09.000000000 +0100 +++ new/makedumpfile/makedumpfile.h 2007-02-08 10:21:51.000000000 +0100 @@ -47,6 +47,7 @@ NOT_FOUND_MEMTYPE, SPARSEMEM, SPARSEMEM_EX, + DISCONTIGMEM, FLATMEM }; @@ -190,6 +191,7 @@ #define NOT_FOUND_STRUCTURE (-1) #define FAILED_DWARFINFO (-2) #define INVALID_STRUCTURE_DATA (-3) +#define FOUND_ARRAY_TYPE (LONG_MAX - 1) #define SIZE(X) (size_table.X) #define OFFSET(X) (offset_table.X) @@ -215,12 +217,17 @@ } while (0) #define SYMBOL_ARRAY_LENGTH_INIT(X, Y) \ do { \ - if ((ARRAY_LENGTH(X) = get_array_length(Y, NULL, TRUE)) == FAILED_DWARFINFO) \ + if ((ARRAY_LENGTH(X) = get_array_length(Y, NULL, DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH)) == FAILED_DWARFINFO) \ + return FALSE; \ +} while (0) +#define SYMBOL_ARRAY_TYPE_INIT(X, Y) \ +do { \ + if ((ARRAY_LENGTH(X) = get_array_length(Y, NULL, DWARF_INFO_CHECK_SYMBOL_ARRAY_TYPE)) == FAILED_DWARFINFO) \ return FALSE; \ } while (0) #define MEMBER_ARRAY_LENGTH_INIT(X, Y, Z) \ do { \ - if ((ARRAY_LENGTH(X) = get_array_length(Y, Z, FALSE)) == FAILED_DWARFINFO) \ + if ((ARRAY_LENGTH(X) = get_array_length(Y, Z, DWARF_INFO_GET_MEMBER_ARRAY_LENGTH)) == FAILED_DWARFINFO) \ return FALSE; \ } while (0) @@ -584,6 +591,9 @@ struct pglist_data { long node_zones; long nr_zones; + long node_mem_map; + long node_start_pfn; + long node_spanned_pages; } pglist_data; struct free_area { long free_list; @@ -621,11 +631,12 @@ /* * Debugging information */ -#define DWARF_INFO_GET_STRUCT_SIZE 1 -#define DWARF_INFO_GET_MEMBER_OFFSET 2 -#define DWARF_INFO_GET_NOT_NAMED_UNION_OFFSET 3 -#define DWARF_INFO_GET_MEMBER_ARRAY_LENGTH 4 -#define DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH 5 +#define DWARF_INFO_GET_STRUCT_SIZE (1) +#define DWARF_INFO_GET_MEMBER_OFFSET (2) +#define DWARF_INFO_GET_NOT_NAMED_UNION_OFFSET (3) +#define DWARF_INFO_GET_MEMBER_ARRAY_LENGTH (4) +#define DWARF_INFO_GET_SYMBOL_ARRAY_LENGTH (5) +#define DWARF_INFO_CHECK_SYMBOL_ARRAY_TYPE (6) struct dwarf_info { unsigned int cmd; /* IN */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/Makefile new/makedumpfile/Makefile --- old/makedumpfile/Makefile 2007-02-02 10:20:09.000000000 +0100 +++ new/makedumpfile/Makefile 2007-02-08 10:21:51.000000000 +0100 @@ -1,7 +1,7 @@ # makedumpfile -VERSION=1.1.0 -DATE=02 February 2007 +VERSION=1.1.1 +DATE=08 February 2007 CC = gcc CFLAGS = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org