diff -rup makedumpfile.old/makedumpfile.c makedumpfile/makedumpfile.c
--- makedumpfile.old/makedumpfile.c	2006-09-30 06:01:35.000000000 +0900
+++ makedumpfile/makedumpfile.c	2006-09-30 06:01:45.000000000 +0900
@@ -721,16 +721,14 @@ is_kvaddr(unsigned long addr)
  * Get the size of structure.
  */
 long
-get_structure_size(char *structname, char *filename)
+get_structure_size(char *structname)
 {
+	dwarf_info.cmd = DWARF_INFO_GET_STRUCT_SIZE;
 	dwarf_info.status = 0;
 	dwarf_info.struct_name = structname;
-	dwarf_info.file_name = filename;
 	dwarf_info.struct_size = NOT_FOUND_STRUCTURE;
-	dwarf_info.no_of_member = 0;
-	dwarf_info.cur_member = DWARF_INFO_MAX;
 
-	if (!dwarfinfo())
+	if (!get_debug_info())
 		return FAILED_DWARFINFO;
 
 	return dwarf_info.struct_size;
@@ -740,23 +738,19 @@ get_structure_size(char *structname, cha
  * Get the offset of member.
  */
 long
-get_member_offset(char *structname, char *membername, int location_member,
-char *filename)
+get_member_offset(char *structname, char *membername, int cmd)
 {
+	dwarf_info.cmd = cmd;
 	dwarf_info.status = 0;
 	dwarf_info.struct_name = structname;
-	dwarf_info.file_name = filename;
 	dwarf_info.struct_size = NOT_FOUND_STRUCTURE;
-	dwarf_info.no_of_member = 1;
- 	dwarf_info.cur_member = DWARF_INFO_MAX;
-	dwarf_info.member[0].name = membername;
-	dwarf_info.member[0].offset = NOT_FOUND_STRUCTURE;
-	dwarf_info.location_member = location_member;
+	dwarf_info.member_name = membername;
+	dwarf_info.member_offset = NOT_FOUND_STRUCTURE;
 
-	if (!dwarfinfo())
+	if (!get_debug_info())
 		return FAILED_DWARFINFO;
 
-	return dwarf_info.member[0].offset;
+	return dwarf_info.member_offset;
 }
 
 int
@@ -765,52 +759,52 @@ get_structure_info(struct DumpInfo *info
 	/*
 	 * Get offsets of the page_discriptor's members.
 	 */
-	SIZE_INIT(page, "page", "mm.h");
-	OFFSET_INIT(page.flags, "page", "flags", "mm.h");
-	OFFSET_INIT(page._count, "page", "_count", "mm.h");
+	SIZE_INIT(page, "page");
+	OFFSET_INIT(page.flags, "page", "flags");
+	OFFSET_INIT(page._count, "page", "_count");
 
 	if (info->kernel_version == VERSION_2_6_15)
-		OFFSET_INIT(page.mapping, "page", "mapping", "mm.h");
+		OFFSET_INIT(page.mapping, "page", "mapping");
 	else
 		OFFSET_INIT_NONAME(page.mapping, "page",
-		   sizeof(unsigned long), "mm.h");
+		   sizeof(unsigned long));
 
-	OFFSET_INIT(page.lru, "page", "lru", "mm.h");
+	OFFSET_INIT(page.lru, "page", "lru");
 
 	/*
 	 * Get offsets of the mem_section's members.
 	 */
-	SIZE_INIT(mem_section, "mem_section", "mmzone.h");
+	SIZE_INIT(mem_section, "mem_section");
 	OFFSET_INIT(mem_section.section_mem_map, "mem_section",
-	    "section_mem_map", "mmzone.h");
+	    "section_mem_map");
 
 	/*
 	 * Get offsets of the pglist_data's members.
 	 */
-	SIZE_INIT(pglist_data, "pglist_data", "mmzone.h");
+	SIZE_INIT(pglist_data, "pglist_data");
 	OFFSET_INIT(pglist_data.node_zones, "pglist_data",
-	    "node_zones", "mmzone.h");
+	    "node_zones");
 
 	/*
 	 * Get offsets of the zone's members.
 	 */
-	SIZE_INIT(zone, "zone", "mmzone.h");
-	OFFSET_INIT(zone.free_pages, "zone", "free_pages", "mmzone.h");
-	OFFSET_INIT(zone.free_area, "zone", "free_area", "mmzone.h");
-	OFFSET_INIT(zone.spanned_pages, "zone", "spanned_pages", "mmzone.h");
+	SIZE_INIT(zone, "zone");
+	OFFSET_INIT(zone.free_pages, "zone", "free_pages");
+	OFFSET_INIT(zone.free_area, "zone", "free_area");
+	OFFSET_INIT(zone.spanned_pages, "zone", "spanned_pages");
 
 	/*
 	 * Get offsets of the free_area's members.
 	 */
-	SIZE_INIT(free_area, "free_area", "mmzone.h");
-	OFFSET_INIT(free_area.free_list, "free_area", "free_list", "mmzone.h");
+	SIZE_INIT(free_area, "free_area");
+	OFFSET_INIT(free_area.free_list, "free_area", "free_list");
 
 	/*
 	 * Get offsets of the list_head's members.
 	 */
-	SIZE_INIT(list_head, "list_head", "list.h");
-	OFFSET_INIT(list_head.next, "list_head", "next", "list.h");
-	OFFSET_INIT(list_head.prev, "list_head", "prev", "list.h");
+	SIZE_INIT(list_head, "list_head");
+	OFFSET_INIT(list_head.next, "list_head", "next");
+	OFFSET_INIT(list_head.prev, "list_head", "prev");
 
 	return TRUE;
 }
diff -rup makedumpfile.old/makedumpfile.h makedumpfile/makedumpfile.h
--- makedumpfile.old/makedumpfile.h	2006-09-30 06:01:35.000000000 +0900
+++ makedumpfile/makedumpfile.h	2006-09-30 06:01:45.000000000 +0900
@@ -199,20 +199,20 @@ do { \
 #define OFFSET(X)		(offset_table.X)
 #define GET_STRUCTURE_SIZE	get_structure_size
 #define GET_MEMBER_OFFSET	get_member_offset
-#define SIZE_INIT(X, Y, F) \
+#define SIZE_INIT(X, Y) \
 do { \
-	if ((SIZE(X) = GET_STRUCTURE_SIZE(Y, F)) == FAILED_DWARFINFO) \
+	if ((SIZE(X) = GET_STRUCTURE_SIZE(Y)) == FAILED_DWARFINFO) \
 		return FALSE; \
 } while (0)
-#define OFFSET_INIT(X, Y, Z, F) \
+#define OFFSET_INIT(X, Y, Z) \
 do { \
-	if ((OFFSET(X) = GET_MEMBER_OFFSET(Y, Z, DWARF_INFO_MAX, F)) \
+	if ((OFFSET(X) = GET_MEMBER_OFFSET(Y, Z, DWARF_INFO_GET_MEMBER_OFFSET)) \
 	     == FAILED_DWARFINFO) \
 		return FALSE; \
 } while (0)
-#define OFFSET_INIT_NONAME(X, Y, S, F) \
+#define OFFSET_INIT_NONAME(X, Y, S) \
 do { \
-	if ((OFFSET(X) = (GET_MEMBER_OFFSET(Y, NULL, 0, F) + S)) \
+	if ((OFFSET(X) = (GET_MEMBER_OFFSET(Y, NULL, DWARF_INFO_GET_NOT_NAMED_UNION_OFFSET) + S)) \
 	     == FAILED_DWARFINFO) \
 		return FALSE; \
 } while (0)
@@ -526,3 +526,24 @@ struct symbol_table	symbol_table;
 struct size_table	size_table;
 struct offset_table	offset_table;
 
+/*
+ * 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_FOUND_STRUCT			1
+#define DWARF_INFO_FOUND_MEMBER			2
+
+struct dwarf_info {
+	uint32_t	status;		/* TEMP */
+	unsigned int	cmd;		/* IN */
+	char	*vmlinux_name;		/* IN */
+	char	*struct_name;		/* IN */
+	int	vmlinux_fd;		/* IN */
+	int	struct_size;		/* OUT */
+	char	*member_name;		/* IN */
+	int	member_offset;		/* OUT */
+};
+
+extern struct dwarf_info dwarf_info;
