Merge authors: poy (poy) ------------------------------------------------------------ revno: 2632 [merge] committer: poy <[email protected]> branch nick: trunk timestamp: Mon 2011-10-10 22:39:31 +0200 message: update libdwarf removed: dwarf/stdafx.h added: dwarf/patches/ dwarf/patches/faulty_aranges.patch modified: dwarf/ChangeLog dwarf/config.h.in dwarf/dwarf_arange.c dwarf/dwarf_die_deliv.c dwarf/dwarf_error.c dwarf/dwarf_form.c dwarf/dwarf_frame.c dwarf/dwarf_frame2.c dwarf/dwarf_harmless.c dwarf/dwarf_incl.h dwarf/dwarf_init_finish.c dwarf/dwarf_line.c dwarf/dwarf_opaque.h dwarf/libdwarf.h dwarf/readme.txt win32/MainWindow.cpp
-- lp:dcplusplus https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk Your team Dcplusplus-team is subscribed to branch lp:dcplusplus. To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dwarf/ChangeLog' --- dwarf/ChangeLog 2011-06-24 15:48:34 +0000 +++ dwarf/ChangeLog 2011-10-10 20:34:10 +0000 @@ -1,3 +1,84 @@ +2011-10-09 DavidAnderson <[email protected]> . + * dwarf_die_deliv.c, dwarf_elf_access.c: Fix bad indentation. +2011-10-05 DavidAnderson <[email protected]> . + * dwarf_die_deliv.c: When relocations fail, record + a 'harmless error' and continue the CU loading. + No way to be sure the error is really harmless, of course. + But it seems to often be harmless. + For some if() tests add {} to make the clause extent clear. + * dwarf_harmless.c: Add a comment prefix to dwarf_harmless_init(). +2011-10-03 DavidAnderson <[email protected]> + * dwarf_line.c: Introduce {} in a test to avoid future mistakes. +2011-09-23 DavidAnderson <[email protected]> + * dwarf_arange.c: Test for a zero address-size: that indicates + broken dwarf generation. + * dwarf_line.c: Test for irrational line number header data and + error off with DW_DLE_LINE_NUMBER_HEADER_ERROR if we find it. + Add accidentally-omitted check for version 4. + * dwarf_error.c, libdwarf.h: New error code + DW_DLE_LINE_NUMBER_HEADER_ERROR. +2011-09-16 DavidAnderson <[email protected]> + * dwarf_elf_access.c: Give up relocating if the Elf symtab + header sh_entrysize is zero, and refine the test for + invalid symbol index to be a >= test. + * dwarf_error.c: Define text message for + DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO. + * libdwarf.h: New error code DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO. +2011-09-15 DavidAnderson <[email protected]> + * dwarf_elf_access.c: Adding fields to the object + structs dwarf uses and using them for error checks + when processing relocations. + * dwarf_error.c: Adding descriptions of new error messages + for Elf object file interpretation problems. + * dwarf_init_finish.c: Adding 'entrysize' field about objects + do dwarf_elf_access.c can check for object and relocation + data errors and avoid a coredump. And we memset() a struct + to ensure there are no uninitialized contents. + * dwarf_opaque.h: Adding new dss_entrysize and + dss_reloc_entrysize fields so elf error + checks can be added to dwarf_elf_access.c. These changes mean + you must recompile all of libdwarf source, not + just a subset, when rebuilding (the first time one sees this change). + * libdwarf.h: Adding entrysize element to Dwarf_Obj_Access_Section_s. + Non-elf object formats can just set this field zero and ignore it. + Added new elf-specific error codes for the new checks in + dwarf_elf_access.c. +2011-09-14 DavidAnderson <[email protected]> + * BLDLIBDWARFTAR: Moved a local disk file. Irrelevant + to everyone but DA. + * dwarf_arange.c: check that the address_size and segment + selector size fields are sensible. + * dwarf_die_deliv.c,dwarf_frame2.c: Give + DW_DLE_ADDRESS_SIZE_ERROR or DW_DLE_CU_ADDRESS_SIZE_BAD + if the address size read from a section is obviously wrong. + Similarly for a bad segment-selector-size give + DW_DLE_SEGMENT_SIZE_BAD. + * dwarf_error.c: Added text for the DW_DLE_SEGMENT_SIZE_BAD + error. + * dwarf_frame.c: If dwarf_set_default_address_size() is handed + an address_size that we cannot handle, ignore the input so + we don't wind up coredumping the library or consumer code. + * libdwarf2.1.mm: Updated list of error codes a little bit. Rev 1.99 + * libdwarf2.1.pdf: Regenerated. +2011-09-08 DavidAnderson <[email protected]> + * dwarf_frame.c: Fixed bad indents. +2011-09-02 DavidAnderson <[email protected]> + * libdwarf2.1.mm: Document the new function + dwarf_set_default_address_size(). Updated revision to 1.97. + * libdwarf2.1.pdf: Regenerated. + * dwarf_frame.c: Implement dwarf_set_default_address_size(). + * libdwarf.h: Declare the new function dwarf_set_default_address_size(). + * dwarf_form.c(dwarf_formref): Removed c99-ish + declaration so C90 can compile the code. + * Makefile.in, configure.in: If building shared lib + CFLAGS gets -fPIC added in. + * configure: Fegenerated. + * dwarf_loc.c: New test returns DW_DLE_LOC_BAD_TERMINATION + in case of compiler bug in location expression. + * dwarf_error.c, libdwarf.h: Define and document the new + error. + * pro_opaque.h: Fixed a bad indent. + 2011-06-12 DavidAnderson <[email protected]> * libdwarf.h: Added dwarf_producer_init_c() and its callback functions. Adds a user_data void* to the === modified file 'dwarf/config.h.in' --- dwarf/config.h.in 2011-06-24 15:48:34 +0000 +++ dwarf/config.h.in 2011-10-10 20:34:10 +0000 @@ -58,6 +58,9 @@ /* Define 1 if want producer to build with IRIX offset sizes */ #undef HAVE_SGI_IRIX_OFFSETS +/* Define 1 if we have the Windows specific header stdafx.h */ +#undef HAVE_STDAFX_H + /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H === modified file 'dwarf/dwarf_arange.c' --- dwarf/dwarf_arange.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_arange.c 2011-10-10 20:39:31 +0000 @@ -147,18 +147,29 @@ } address_size = *(Dwarf_Small *) arange_ptr; + if(address_size > sizeof(Dwarf_Addr)) { + _dwarf_error(dbg, error, DW_DLE_ADDRESS_SIZE_ERROR); + return DW_DLV_ERROR; + } + if(address_size == 0) { + _dwarf_error(dbg, error, DW_DLE_ADDRESS_SIZE_ERROR); + return DW_DLV_ERROR; + } /* It is not an error if the sizes differ. Unusual, but not an error. */ arange_ptr = arange_ptr + sizeof(Dwarf_Small); length = length - sizeof(Dwarf_Small); + /* Even DWARF2 had a segment_size field here, meaning + size in bytes of a segment descriptor on the target + system. */ segment_size = *(Dwarf_Small *) arange_ptr; - arange_ptr = arange_ptr + sizeof(Dwarf_Small); - length = length - sizeof(Dwarf_Small); - if (segment_size != 0) { + if(segment_size > sizeof(Dwarf_Addr)) { _dwarf_error(dbg, error, DW_DLE_SEGMENT_SIZE_BAD); return (DW_DLV_ERROR); } + arange_ptr = arange_ptr + sizeof(Dwarf_Small); + length = length - sizeof(Dwarf_Small); range_entry_size = 2*address_size + segment_size; /* Round arange_ptr offset to next multiple of address_size. */ @@ -173,7 +184,9 @@ Dwarf_Unsigned segment_selector = 0; Dwarf_Unsigned range_length = 0; /* For segmented address spaces, the first field to - read is a segment selector (new in DWARF4) */ + read is a segment selector (new in DWARF4). + Surprising since the segment_size was always there + in the table header! */ if(version == 4 && segment_size != 0) { READ_UNALIGNED(dbg, segment_selector, Dwarf_Unsigned, arange_ptr, segment_size); === modified file 'dwarf/dwarf_die_deliv.c' --- dwarf/dwarf_die_deliv.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_die_deliv.c 2011-10-10 20:34:10 +0000 @@ -186,6 +186,11 @@ cu_context->cc_address_size = *(Dwarf_Small *) cu_ptr; + if(cu_context->cc_address_size > sizeof(Dwarf_Addr)) { + _dwarf_error(dbg, error, DW_DLE_CU_ADDRESS_SIZE_BAD); + return (NULL); + } + if ((length < CU_VERSION_STAMP_SIZE + local_length_size + CU_ADDRESS_SIZE_SIZE) || (offset + length + local_length_size + @@ -233,6 +238,25 @@ return (cu_context); } +static int +reloc_incomplete(Dwarf_Error err) +{ + int e = dwarf_errno(err); + if( e == DW_DLE_RELOC_MISMATCH_INDEX || + e == DW_DLE_RELOC_MISMATCH_RELOC_INDEX || + e == DW_DLE_RELOC_MISMATCH_STRTAB_INDEX || + e == DW_DLE_RELOC_SECTION_MISMATCH || + e == DW_DLE_RELOC_SECTION_MISSING_INDEX || + e == DW_DLE_RELOC_SECTION_LENGTH_ODD || + e == DW_DLE_RELOC_SECTION_PTR_NULL || + e == DW_DLE_RELOC_SECTION_MALLOC_FAIL || + e == DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD ) { + return 1; + } + return 0; +} + + /* Returns offset of next compilation-unit thru next_cu_offset pointer. @@ -287,10 +311,26 @@ if (dbg->de_cu_context == NULL) { new_offset = 0; if (!dbg->de_debug_info.dss_data) { - int res = _dwarf_load_debug_info(dbg, error); + Dwarf_Error err2= 0; + int res = _dwarf_load_debug_info(dbg, &err2); if (res != DW_DLV_OK) { - return res; + if(reloc_incomplete(err2)) { + /* We will assume all is ok, though it is not. + Relocation errors need not be fatal. */ + char msg_buf[200]; + snprintf(msg_buf,sizeof(msg_buf), + "Relocations did not complete successfully, but we are " + " ignoring error: %s",dwarf_errmsg(err2)); + dwarf_insert_harmless_error(dbg,msg_buf); + res = DW_DLV_OK; + } else { + if( error) { + *error = err2; + } + return res; + } + } } @@ -328,21 +368,26 @@ dbg->de_cu_context = cu_context; - if (cu_header_length != NULL) + if (cu_header_length != NULL) { *cu_header_length = cu_context->cc_length; + } - if (version_stamp != NULL) + if (version_stamp != NULL) { *version_stamp = cu_context->cc_version_stamp; - - if (abbrev_offset != NULL) + } + if (abbrev_offset != NULL) { *abbrev_offset = cu_context->cc_abbrev_offset; + } - if (address_size != NULL) + if (address_size != NULL) { *address_size = cu_context->cc_address_size; - if (offset_size != NULL) + } + if (offset_size != NULL) { *offset_size = cu_context->cc_length_size; - if (extension_size != NULL) + } + if (extension_size != NULL) { *extension_size = cu_context->cc_extension_size; + } new_offset = new_offset + cu_context->cc_length + cu_context->cc_length_size + cu_context->cc_extension_size; === modified file 'dwarf/dwarf_error.c' --- dwarf/dwarf_error.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_error.c 2011-10-10 20:34:10 +0000 @@ -216,7 +216,7 @@ "DW_DLE_MAKE_CU_CONTEXT_FAIL", "DW_DLE_REL_ALLOC", "DW_DLE_ARANGE_OFFSET_BAD", - "DW_DLE_SEGMENT_SIZE_BAD", + "DW_DLE_SEGMENT_SIZE_BAD (135) Size of a segment selector should usually be less than 8 (bytes).", "DW_DLE_ARANGE_LENGTH_BAD", "DW_DLE_ARANGE_DECODE_ERROR", "DW_DLE_ARANGES_NULL", @@ -315,7 +315,13 @@ "DW_DLE_NOT_REF_FORM(226)", "DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE(227)", "DW_DLE_REF_SIG8_NOT_HANDLED (228)", - "DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH (229)" + "DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH (229)", + "DW_DLE_LOC_BAD_TERMINATION (230) the last location operator in an expression is missing some associated data, an operator ended too soon", + "DW_DLE_SYMTAB_SECTION_LENGTH_ODD (231) so doing relocations seems unsafe", + "DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD (232) so doing a relocation seems unsafe", + "DW_DLE_RELOC_SECTION_RELOC_TARGET_SIZE_UNKNOWN (233) so doing a relocation is unsafe", + "DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO(234)", + "DW_DLE_LINE_NUMBER_HEADER_ERROR (235), a line number program header seems incomplete (perhaps the header_length is wrong?).", }; === modified file 'dwarf/dwarf_form.c' --- dwarf/dwarf_form.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_form.c 2011-10-10 20:34:10 +0000 @@ -315,10 +315,11 @@ Dwarf_Unsigned offset = 0; Dwarf_CU_Context cu_context = 0; Dwarf_Unsigned maximumoffset = 0; + int res = DW_DLV_ERROR; *ret_offset = 0; - int res = get_attr_dbg(&dbg,&cu_context,attr,error); + res = get_attr_dbg(&dbg,&cu_context,attr,error); if(res != DW_DLV_OK) { return res; } === modified file 'dwarf/dwarf_frame.c' --- dwarf/dwarf_frame.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_frame.c 2011-10-10 20:34:10 +0000 @@ -2317,9 +2317,17 @@ return orig; } - - - +/* Does something only if value passed in is greater than 0 and + a size than we can handle (in number of bytes). */ +Dwarf_Small dwarf_set_default_address_size(Dwarf_Debug dbg, + Dwarf_Small value ) +{ + Dwarf_Small orig = dbg->de_pointer_size; + if (value > 0 && value <= sizeof(Dwarf_Addr)) { + dbg->de_pointer_size = value; + } + return orig; +} static int init_reg_rules_alloc(Dwarf_Debug dbg,struct Dwarf_Frame_s *f, === modified file 'dwarf/dwarf_frame2.c' --- dwarf/dwarf_frame2.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_frame2.c 2011-10-10 20:34:10 +0000 @@ -566,9 +566,17 @@ if( version == DW_CIE_VERSION4) { address_size = *((unsigned char *)frame_ptr); + if(address_size > sizeof(Dwarf_Addr)) { + _dwarf_error(dbg, error, DW_DLE_ADDRESS_SIZE_ERROR); + return (DW_DLV_ERROR); + } ++frame_ptr; segment_size = *((unsigned char *)frame_ptr); ++frame_ptr; + if(segment_size > sizeof(Dwarf_Addr)) { + _dwarf_error(dbg, error, DW_DLE_SEGMENT_SIZE_BAD); + return (DW_DLV_ERROR); + } } DECODE_LEB128_UWORD(frame_ptr, lreg); === modified file 'dwarf/dwarf_harmless.c' --- dwarf/dwarf_harmless.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_harmless.c 2011-10-10 20:34:10 +0000 @@ -179,6 +179,8 @@ return prevcount-1; } +/* Only callable from within libdwarf (as a practical matter) +*/ void dwarf_harmless_init(struct Dwarf_Harmless_s *dhp,unsigned size) { === modified file 'dwarf/dwarf_incl.h' --- dwarf/dwarf_incl.h 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_incl.h 2011-10-10 20:34:10 +0000 @@ -46,9 +46,9 @@ #define _GNU_SOURCE 1 #endif -#ifdef WIN32 /* Windows specific. */ +#ifdef HAVE_STDAFX_H /* Windows specific. */ #include "stdafx.h" -#endif /* WIN32 */ +#endif /* HAVE_STDAFX_H */ #include "libdwarfdefs.h" #include <string.h> === modified file 'dwarf/dwarf_init_finish.c' --- dwarf/dwarf_init_finish.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_init_finish.c 2011-10-10 20:34:10 +0000 @@ -116,6 +116,7 @@ secdata->dss_size = doas->size; secdata->dss_addr = doas->addr; secdata->dss_link = doas->link; + secdata->dss_entrysize = doas->entrysize; return DW_DLV_OK; } @@ -127,6 +128,7 @@ { secdata->dss_reloc_index = section_index; secdata->dss_reloc_size = doas->size; + secdata->dss_reloc_entrysize = doas->entrysize; secdata->dss_reloc_addr = doas->addr; secdata->dss_reloc_symtab = doas->link; secdata->dss_reloc_link = doas->link; @@ -217,6 +219,7 @@ int res = DW_DLV_ERROR; int err = 0; + memset(&doas,0,sizeof(doas)); res = obj->methods->get_section_info(obj->object, section_index, &doas, &err); === modified file 'dwarf/dwarf_line.c' --- dwarf/dwarf_line.c 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_line.c 2011-10-10 20:34:10 +0000 @@ -1,4 +1,4 @@ -/* +/* . Copyright (C) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. Portions Copyright (C) 2007-2011 David Anderson. All Rights Reserved. Portions Copyright (C) 2010 SN Systems Ltd. All Rights Reserved. @@ -139,8 +139,9 @@ /* ***** BEGIN CODE ***** */ /* Reset error. */ - if (error != NULL) + if (error != NULL) { *error = NULL; + } CHECK_DIE(die, DW_DLV_ERROR); dbg = die->di_cu_context->cc_dbg; @@ -1672,7 +1673,8 @@ prefix_out->pf_version = version; line_ptr += sizeof(Dwarf_Half); if (version != CURRENT_VERSION_STAMP && - version != CURRENT_VERSION_STAMP3) { + version != CURRENT_VERSION_STAMP3 && + version != CURRENT_VERSION_STAMP4) { _dwarf_error(dbg, err, DW_DLE_VERSION_STAMP_ERROR); return (DW_DLV_ERROR); } @@ -1797,6 +1799,10 @@ memset(prefix_out->pf_include_directories, 0, sizeof(Dwarf_Small *) * directories_malloc); + if (line_ptr >= line_ptr_end) { + _dwarf_error(dbg, err, DW_DLE_LINE_NUMBER_HEADER_ERROR); + return (DW_DLV_ERROR); + } while ((*(char *) line_ptr) != '\0') { if (directories_count >= directories_malloc) { Dwarf_Unsigned expand = 2 * directories_malloc; @@ -1819,6 +1825,10 @@ line_ptr; line_ptr = line_ptr + strlen((char *) line_ptr) + 1; directories_count++; + if (line_ptr >= line_ptr_end) { + _dwarf_error(dbg, err, DW_DLE_LINE_NUMBER_HEADER_ERROR); + return (DW_DLV_ERROR); + } } prefix_out->pf_include_directories_count = directories_count; line_ptr++; @@ -1834,6 +1844,10 @@ memset(prefix_out->pf_line_table_file_entries, 0, sizeof(struct Line_Table_File_Entry_s) * files_malloc); + if (line_ptr >= line_ptr_end) { + _dwarf_error(dbg, err, DW_DLE_LINE_NUMBER_HEADER_ERROR); + return (DW_DLV_ERROR); + } while (*(char *) line_ptr != '\0') { Dwarf_Unsigned utmp; Dwarf_Unsigned dir_index = 0; @@ -1882,6 +1896,10 @@ curline->lte_length_of_file = file_length; ++files_count; + if (line_ptr >= line_ptr_end) { + _dwarf_error(dbg, err, DW_DLE_LINE_NUMBER_HEADER_ERROR); + return (DW_DLV_ERROR); + } } prefix_out->pf_files_count = files_count; === modified file 'dwarf/dwarf_opaque.h' --- dwarf/dwarf_opaque.h 2011-06-24 15:48:34 +0000 +++ dwarf/dwarf_opaque.h 2011-10-10 20:34:10 +0000 @@ -135,6 +135,12 @@ struct Dwarf_Section_s { Dwarf_Small * dss_data; Dwarf_Unsigned dss_size; + /* Some Elf sections have a non-zero dss_entrysize which + is the size in bytes of a table entry in the section. + Relocations and symbols are both in tables, so have a + non-zero entrysize. Object formats which do not care + about this should leave this field zero. */ + Dwarf_Unsigned dss_entrysize; Dwarf_Word dss_index; /* dss_addr is the 'section address' which is only non-zero for a GNU eh section. @@ -154,6 +160,7 @@ Dwarf_Half dss_reloc_index; /* Zero means ignore the reloc fields. */ Dwarf_Small * dss_reloc_data; Dwarf_Unsigned dss_reloc_size; + Dwarf_Unsigned dss_reloc_entrysize; Dwarf_Addr dss_reloc_addr; /* dss_reloc_symtab is the sh_link of a .rela to its .symtab, leave it 0 if non-meaningful. */ === modified file 'dwarf/libdwarf.h' --- dwarf/libdwarf.h 2011-06-24 15:48:34 +0000 +++ dwarf/libdwarf.h 2011-10-10 20:34:10 +0000 @@ -554,13 +554,26 @@ names in the 'name' field. libdwarf does not free the strings in 'name'. */ struct Dwarf_Obj_Access_Section_s { + /* addr is the virtual address of the first byte of + the section data. Usually zero when the address + makes no sense for a given section. */ Dwarf_Addr addr; + + /* Size in bytes of the section. */ Dwarf_Unsigned size; + + /* Having an accurate section name makes debugging of libdwarf easier. + and is essential to find the .debug_ sections. */ const char* name; /* Set link to zero if it is meaningless. If non-zero it should be a link to a rela section or from symtab to strtab. In Elf it is sh_link. */ Dwarf_Unsigned link; + /* Elf sections that are tables have a non-zero entrysize so + the count of entries can be calculated even without + the right structure definition. If your object format + does not have this data leave this zero. */ + Dwarf_Unsigned entrysize; }; /* Returned by the get_endianness function in @@ -1037,11 +1050,16 @@ #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227 #define DW_DLE_REF_SIG8_NOT_HANDLED 228 #define DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH 229 - +#define DW_DLE_LOC_BAD_TERMINATION 230 +#define DW_DLE_SYMTAB_SECTION_LENGTH_ODD 231 +#define DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD 232 +#define DW_DLE_RELOC_SECTION_RELOC_TARGET_SIZE_UNKNOWN 233 +#define DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO 234 +#define DW_DLE_LINE_NUMBER_HEADER_ERROR 235 /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */ -#define DW_DLE_LAST 229 +#define DW_DLE_LAST 235 #define DW_DLE_LO_USER 0x10000 /* Taken as meaning 'undefined value', this is not @@ -2639,12 +2657,14 @@ Dwarf_Unsigned * /*debug_ranges_size*/, Dwarf_Unsigned * /*debug_pubtypes_size*/); +/* The 'set' calls here return the original (before any change + by these set routines) of the respective fields. */ /* Multiple releases spelled 'initial' as 'inital' . The 'inital' spelling should not be used. */ Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, Dwarf_Half /*value*/); /* Additional interface with correct 'initial' spelling. */ -/* It is likely you will want to call the following 5 functions +/* It is likely you will want to call the following 6 functions before accessing any frame information. All are useful to tailor handling of pseudo-registers needed to turn frame operation references into simpler forms and to @@ -2661,6 +2681,10 @@ Dwarf_Half /*value*/); Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, Dwarf_Half /*value*/); +/* dwarf_set_default_address_size only sets 'value' if value is + greater than zero. */ +Dwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/, + Dwarf_Small /* value */); /* As of April 27, 2009, this version with no diepointer is obsolete though supported. Use dwarf_get_ranges_a() instead. */ === added directory 'dwarf/patches' === added file 'dwarf/patches/faulty_aranges.patch' --- dwarf/patches/faulty_aranges.patch 1970-01-01 00:00:00 +0000 +++ dwarf/patches/faulty_aranges.patch 2011-10-10 20:39:31 +0000 @@ -0,0 +1,16 @@ +=== modified file 'dwarf/dwarf_arange.c' +--- dwarf/dwarf_arange.c 2011-10-10 20:34:10 +0000 ++++ dwarf/dwarf_arange.c 2011-10-10 20:35:13 +0000 +@@ -117,6 +117,11 @@ + arange_ptr, local_length_size, + local_extension_size); + arange_ptr_past_end = arange_ptr + length; ++#ifdef WIN32 ++ if (length == 0) { ++ continue; ++ } ++#endif + + + READ_UNALIGNED(dbg, version, Dwarf_Half, + === modified file 'dwarf/readme.txt' --- dwarf/readme.txt 2011-06-26 21:47:04 +0000 +++ dwarf/readme.txt 2011-10-10 20:39:31 +0000 @@ -1,1 +1,3 @@ This folder contains useful parts of libdwarf <http://reality.sgiweb.org/davea/dwarf.html>. + +Patches in the "patches" directory have been applied. === removed file 'dwarf/stdafx.h' === modified file 'win32/MainWindow.cpp' --- win32/MainWindow.cpp 2011-10-10 20:18:18 +0000 +++ win32/MainWindow.cpp 2011-10-10 20:34:10 +0000 @@ -1319,7 +1319,7 @@ // update when the database is non-existent or older than 16 days (GeoIP updates every month). try { File f(GeoManager::getDbPath(v6) + ".gz", File::READ, File::OPEN); - if(f.getSize() > 0 && f.getLastModified() > GET_TIME() - 3600 * 24 * 16) { + if(f.getSize() > 0 && static_cast<time_t>(f.getLastModified()) > GET_TIME() - 3600 * 24 * 16) { return; } } catch(const FileException&) { }
_______________________________________________ Mailing list: https://launchpad.net/~linuxdcpp-team Post to : [email protected] Unsubscribe : https://launchpad.net/~linuxdcpp-team More help : https://help.launchpad.net/ListHelp

