aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Breakpad Linux dumper: Rename DumpStabsHandler to StabsToModule.jimblandy2010-05-055-52/+53
| | | | | | | | | | | | | | | All the other classes which receive debugging data from some sort of parser and use it to populate a Module have names ending in "ToModule": DwarfCUToModule, DwarfCFIToModule. Also, DumpStabsHandler doesn't actually dump anything. This patch renames the DumpStabsHandler class to StabsToModule, which is more consistent and descriptive. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@584 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Make StabsReader independent of endianness and word size.jimblandy2010-05-0512-595/+446
| | | | | | | | | | | | | | | | | | | | | | | | StabsReader simply applies a reinterpret_cast to treat the stab entry data as an array of 'struct nlist' structures, making the parser specific on the host endianness, word size, and alignment rules. On Mac OS X, a single fat binary file may contain object files of different ABIs, of which the user chooses one at run time. This patch changes the parser to read the data using the google_breakpad:: ByteCursor class, which can handle different endiannesses and word sizes. The StabsReader constructor now takes arguments indicating the endianness of the data and the size of each entry's value field. The patch changes src/common/linux/dump_symbols.cc to pass the new argument. This patch changes the StabsReader unit tests to use the google_breakpad:: TestAssembler classes to generate test data, rather than reading it from a file. This makes it easy to generate test data in various endiannesses and word sizes. It also adds tests for the new parser behaviors. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@583 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad symbol dumper: Define the ByteBuffer and ByteCursor classes.jimblandy2010-05-053-0/+1058
| | | | | | | | | | The ByteBuffer and ByteCursor classes are utility classes for reading binary files, handling endianness and word size issues in a portable way. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@582 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Replacing solutions with gyp files. Moving tests for windows clients in ↵hansl@google.com2010-05-0318-1320/+1822
| | | | | | | | unittests. Review URL: http://codereview.chromium.org/1687018 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@581 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Fix dependency on Visual C++ 9 introduced by revision 557.nealsid2010-04-291-1/+1
| | | | | | | | | | | A=nealsid r=mmentovai http://breakpad.appspot.com/105001/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@580 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Fix assembly in the ARM sys_clone implementation to indicate that r7 is ↵ted.mielczarek2010-04-291-8/+8
| | | | | | clobbered, and also remove some extraneous semicolons from ARM portions of linux_syscall_support. r=jimb at https://bugzilla.mozilla.org/show_bug.cgi?id=555674 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@579 4c0a9323-5329-0410-9bdc-e9ce6186880e
* issue 372 - fix Mac OS X minidump generation code to handle x86-64 properly. ↵ted.mielczarek2010-04-296-17/+54
| | | | | | r=mark at http://breakpad.appspot.com/103001 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@578 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Fix include paths to be consistent with rest of projectnealsid2010-04-281-1/+1
| | | | | | | | | | http://breakpad.appspot.com/104001 A=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@577 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux Dumper: Have DumpStabsHandler free accumulated functions if ↵jimblandy2010-04-282-0/+10
| | | | | | | | | | | | | | | | | | | | | | | Finalize is not called The DumpStabsHandler class creates Module::Function objects as it processes data from the StabsReader, but waits to add the Functions to the Module until all parsing is complete and its Finalize member function is called, so that it can compute line and function end addresses that the STABS data may have left implicit. If the DumpStabsHandler is destructed before its Finalize method is called, it fails to free the Functions it has created, but not yet added to the Module. (Adding a Function to a Module transfers ownership of the Function to the Module.) This adds a destructor to DumpStabsHandler which takes care of freeing any Functions that it still owns. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@576 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Dumper: Move CFI register names to DwarfCFIToModule class.jimblandy2010-04-284-46/+110
| | | | | | | | | | | | | | | | | | At the moment, the mappings from register numbers appearing in DWARF CFI and .eh_frame exception handling sections to the appropriate processor-specific names are in src/common/linux/dump_syms.cc. However, the numberings are (for the most part) the same on all platforms using DWARF, so there's no reason those tables shouldn't be shared between the Linux and Mac symbol dumpers. This patch moves the tables into a nested class of DwarfCFIToModule, so they the Mac dumper can use them when it is changed to use DwarfCFIToModule. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@575 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad test support: Move test_assembler.{h,cc} from src/processor to ↵jimblandy2010-04-2710-11/+11
| | | | | | | | | | | | | | src/common. The google_breakpad::TestAssembler classes are used in both the processor's and the Linux dumper's test suites, and will soon be used in the Mac dumper's tests as well. This patch moves their source files from src/processor to src/common. a=jimblandy, r=thestig git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@574 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Patch from Zhurun to fix build breaks in gcc 4.4.1nealsid2010-04-262-14/+31
| | | | | | | | | | CR URL: http://breakpad.appspot.com/100001/show A=Zhurun R=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@573 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad processor: Work around overload resolution problems in stream ↵jimblandy2010-04-201-2/+2
| | | | | | | | | | | | | | | | | | | | | pos_type comparisons When building with G++ 4.1.2, src/processor/cfi_frame_info.cc fails to build with the error below. G++ 4.2.1 and later do not seem to report this problem. This patch works around the problem by casting stream.tellp() to std::streamoff before doing the comparison. src/processor/cfi_frame_info.cc: In member function `std::string google_breakpad::CFIFrameInfo::Serialize() const': src/processor/cfi_frame_info.cc:105: error: ambiguous overload for `operator!=' in `stream.std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::<anonymous>.std::basic_ostream<_CharT, _Traits>::tellp [with _CharT = char, _Traits = std::char_traits<char>]() != 0' src/processor/cfi_frame_info.cc:105: note: candidates are: operator!=(std::streamoff, int) <built-in> /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/postypes.h:143: note: bool std::fpos<_StateT>::operator!=(const std::fpos<_StateT>&) const [with _StateT = __mbstate_t] a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@572 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad stack walker: remove embedded newlines from module names.jimblandy2010-04-151-0/+4
| | | | | | | | | | | | | | | | pdb filenames in crash reports may contain embedded newlines. When minidump-stackwalk prints these lines, it ends up with: Module|olek8r4u.dll|6.0.6000.16386|\\xc2\\xeb\\x17\\x04J\\xb6:\\xbaT\\xf3\\xef\\xe8Y\\x90\\x86\\xaa\\xe5\\x16n\\xb1\\x80\\x85\\t\\x12!\\x16\\x0f\\x98\\xf8\\x89\\x16"\\x96\\xd4\\x84\\x88\\xea\\xe3\\r\\r\\x1b\\xca\\x85*^h\\xf5\\xdc\n\\xd9\\xf4}j\\x1d7\\xe39o\\x1f\\xc5\\xc4\\xa6x\\x8ba\\xe8\\xd6K\\x89H\\xe1\\xff\\xe7\\xf5\\xf0Y\\xfd\\xf5\\xdbu\\x0c\\x07\\x86\\xed|29E0B04FCCBE47EB86A6C819E8B89D051|0x00f60000|0x00ff2fff|0\n Which has an embedded newline and the machine parser can't handle it. This patch just strips the embedded newline, just as we strip embedded | separator characters. a=bsmedberg, r=jimblandy git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@571 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Mac now takes response code into account when determining success of a ↵jessicag.feedback@gmail.com2010-04-131-2/+3
| | | | | | symupload. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@570 4c0a9323-5329-0410-9bdc-e9ce6186880e
* provide a network source line resolver + server. r=mark,jimb at ↵ted.mielczarek2010-04-0828-230/+4571
| | | | | | http://breakpad.appspot.com/36001 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@569 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Include what you use.mmentovai2010-04-052-0/+4
| | | | | | | Patch by Adam Langley <agl@chromium.org>. r=me git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@568 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad symbol dumper: Move Linux dumping classes into src/common.jimblandy2010-04-0529-36/+38
| | | | | | | | | | | The Linux symbol dumper's classes are reasonably portable, and should be usable for the Mac dumper as well. Move them to src/common, along with their unit tests. Update #include directives and Makefile. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@567 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux Dumper: Disable warnings about unpaired functions and lines ↵jimblandy2010-04-053-1/+82
| | | | | | | | | | | | | | | | | | | by default. In the process of pairing up DWARF source lines with the functions they belong to, the dumper detects and warns about regions of functions that have no source line information, and vice versa. However, this seems to occur in real code frequently enough (although not often) that the warnings may obscure more serious problems. This patch makes those warnings disabled by default in DwarfCUToModule::WarningReporter. It does not add a way for the dump_syms user to enable them. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@566 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Add gettimeofday to linux_syscall_support.hmmentovai2010-04-021-0/+2
| | | | | | | | Patch by Adam Langley <agl@chromium.org>. R=me git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@565 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Use the correct section's base address.jimblandy2010-04-011-1/+1
| | | | | | | | | | | | | In order to dump call frame information held in .eh_frame sections, the dumper needs to know the proper base address to use for pointers encoded using the DW_EH_PE_textrel encoding. This should be the start of the .text section. However, due to a cut-and-paste typo, the dumper was supplying the base address of the ".got" section instead. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@564 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Generate make dependencies on header files automatically.jimblandy2010-04-011-5/+9
| | | | | | | | | | | | | The Linux dumper's Makefile doesn't record the object files' dependence on header files at all, just because I was too lazy to write them out and knew I would forget to keep them up to date anyway. But I've wasted too much time tracking down mysterious segmentation faults and other problems after changing header files, and I know it's wasted others' time, too. a=jimblandy, r=nealsid,dmuir git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@563 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Include filename in error messages.jimblandy2010-03-311-11/+13
| | | | | | | a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@562 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad DWARF parser: correct comments regarding dynamic_cast.jimblandy2010-03-301-7/+14
| | | | | | | | | | | | | | | | The comments don't accurately describe what the style guide says. Regardless of what the style guide says, RTTI seems to make trouble in practice, because so many people build with it disabled. Since only the symbol dumper uses RTTI, not the client library, it may be practical for people to simply enable RTTI for the dumper. Failing that, it may be best in the long run to violate the style guide and make the code work sans RTTI. a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@561 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Make changes requested by Neal Sidhwaney in issue 59002.jimblandy2010-03-293-21/+53
| | | | | | | | | | - Use manifest constants for 'z' augmentation letters. - Fix typos and rearrange some code for legibility. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@560 4c0a9323-5329-0410-9bdc-e9ce6186880e
* [ Mistakenly committed older version of patch. This is the right one. ]jimblandy2010-03-291-3/+3
| | | | | | | | | | | | | | | | | | | Breakpad Linux client: Simplify VerifyStackReadWithMultipleThreads unit test. As written, the VerifyStackReadWithMultipleThreads unit test makes assumptions about the layout of thread_function's stack frame. As a result, the test will fail when compiled with some compilers, or built with certain optimization levels. As an extension to C++, the GNU compilers allow you to request that a variable be placed in a specific register. Using this, we can have thread_function put the thread id in place where the test can find it reliably. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@559 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux client: Simplify VerifyStackReadWithMultipleThreads unit test.jimblandy2010-03-292-10/+19
| | | | | | | | | | | | | | | | | As written, the VerifyStackReadWithMultipleThreads unit test makes assumptions about the layout of thread_function's stack frame. As a result, the test will fail when compiled with some compilers, or built with certain optimization levels. As an extension to C++, the GNU compilers allow you to request that a variable be placed in a specific register. Using this, we can have thread_function put the thread id in place where the test can find it reliably. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@558 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Fix HandleInvalidParameter to provide a locally created exception record for ↵siggi@chromium.org2010-03-261-3/+23
| | | | | | | | | | | the minidump. Having an exception of interest makes the resultant minidumps look just like crash dumps, in that the processor can identify the "crashing" tread. This means such minidumps can be classified by the stack signature, in contrast to the current state of things, in which all such dumps get lumped on a single pile. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@557 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Add omitted newline to warning message in StabsReader::SymbolString.jimblandy2010-03-181-1/+1
| | | | | | | a=jimblandy, no reviewer git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@555 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad processor: Support AMD64 stack unwinding driven by DWARF CFI.jimblandy2010-03-165-55/+492
| | | | | | | | | | | This adds support for 'STACK CFI' records (DWARF CFI) to the AMD64 stack walker. This is necessary for the stack trace to include any frames other than the youngest. Unit tests are included. a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@554 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad: Support DWARF CFI-driven stack walking on ARM.jimblandy2010-03-167-34/+641
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch allows the Breakpad minidump processor to use data from STACK CFI records to generate stack traces for the ARM processor. In the symbol dumper, we need a table mapping DWARF CFI register numbers to their names: STACK CFI records refer to registers by name. In the processor, we expand StackwalkerARM::GetCallerFrame to see if there are STACK CFI records covering the callee, and then use those to recover the caller's register values. There's no good reason the ARM walker couldn't use the SimpleCFIWalker interface declared in cfi_frame_info.h. Unfortunately, that interface assumes that one can map register names to member pointers of the raw context type, while MDRawContextARM uses an array to hold the registers' values: C++ pointer-to-member types can't refer to elements of member arrays. So we have to write out SimpleCFIWalker::FindCallerRegisters in StackwalkerARM::GetCallerFrame. We define enum MDARMRegisterNumbers in minidump_cpu_arm.h, for convenience in referring to certain ARM registers with dedicated purposes, like the stack pointer and the PC. We define validity flags in StackFrameARM for all the registers, since CFI could theoretically recover any of them. In the same vein, we expand minidump_stackwalk.cc to print the values of all valid callee-saves registers in the context --- and use the proper names for special-purpose registers. We provide unit tests that give full code and branch coverage (with minor exceptions). We add a testing interface to StackwalkerARM that allows us to create context frames that lack some register values. a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@553 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Parse the .eh_frame section.jimblandy2010-03-1611-143/+1336
| | | | | | | | | | | | | | | | | | | | | | | | Extend google_breakpad::CFISection with the ability to produce .eh_frame data. Entry headers have a different format, and pointers can be encoded in new and fascinating ways. Extend dwarf2reader::CallFrameInfo to be able to parse either DWARF CFI or .eh_frame data, as determined by an argument to the constructor. Cope with variations in header formats, encoded pointers, and additional data in 'z' augmentation data blocks. Extend the unit tests appropriately. Extend dump_syms to look for a .eh_frame section, and if it is present, find the necessary base addresess and parse its contents. There's no need for DwarfCFIToModule to check the version numbers; if CallFrameInfo can parse it, DwarfCFIToModule should be able to handle it. Adjust tests accordingly. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@552 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad DWARF parser: Add support for parsing .eh_frame encoded pointers.jimblandy2010-03-166-5/+1014
| | | | | | | | | | | | The Linux C++ exception handling data format (.eh_frame) can specify a number of different encodings for the addresses it contains. This patch extends dwarf2reader::ByteReader to read pointers encoded in these ways. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@551 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Add support for dumping DWARF CFI as STACK CFI records.jimblandy2010-03-1614-11/+4935
| | | | | | | | | | | | | | | | | | | | | | | Define a new DWARF parser class, dwarf2reader::CallFrameInfo. Extend google_breakpad::Module to store and write out 'STACK CFI' records. Define a new google_breakpad::DwarfCFIToModule class, to accept DWARF CFI data from the parser and populate a Module with the equivalent STACK CFI records. Extend the Linux symbol dumping tool, dump_syms, to use dwarf2reader::CallFrameInfo, google_breakpad::DwarfCFIToModule, and google_breakpad::Module to extract DWARF CFI from the executable or shared library files and write it to the Breakpad symbol file. Define CFISection, a new class derived from TestAssembler::Section, for use in creating DWARF CFI data for test cases. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@550 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad: Add minidump processor support for DWARF Call Frame Information.jimblandy2010-03-1614-39/+1701
| | | | | | | | | | | | | | | | | | | | | | | | Add a CFIFrameInfo class (named for symmetry with WindowsFrameInfo) to represent the set of STACK CFI rules in effect at a given instruction, and apply them to a set of register values. Provide a SimpleCFIWalker class template, to allow the essential CFI code to be shared amongst the different architectures. Teach BasicSourceLineResolver to partially parse 'STACK CFI' records, and produce the set of rules in effect at a given instruction on demand, by combining the initial rule set and the appropriate rule deltas in a CFIFrameInfo object. Adapt StackwalkerX86 and StackFrameX86 to retrieve, store, and apply CFI stack walking information. Add validity flags for all the general-purpose registers to StackFrameX86::ContextValidity. a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@549 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad processor: Unit tests for StackwalkerX86.jimblandy2010-03-162-0/+879
| | | | | | | | | | | | | Issue 53001 (http://breakpad.appspot.com/53001) defines the TestAssembler classes; those, along with a new set of mock classes defined in stackwalker_unittest_utils.h, make it possible for us to actually do proper unit testing of a stack walker. These tests get us full code coverage for stackwalker_x86.cc. a=jimblandy, r=mmentovai git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@548 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Processor: Add new unit tests for google_breakpad::Minidumpjimblandy2010-03-168-6/+4102
| | | | | | | | | | | | | | This also adds two new test utility class groups, TestAssembler and SynthMinidump. These are overkill for what I'm doing with them here (and may simply be overkill, period), but they make it easy to write unit tests for code that works on binary files or raw memory contents in a cross-platform way. I'm planning to use them for the DWARF CFI unwinding tests and the DWARF CFI parser tests. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@547 4c0a9323-5329-0410-9bdc-e9ce6186880e
* add missing <string> include from r541ted.mielczarek2010-03-031-0/+1
| | | | git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@544 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Fix to cache NOT_FOUND results from symbol supplier on a per-minidump basis nealsid2010-03-033-2/+68
| | | | | | | | | | | http://breakpad.appspot.com/64001 R=ted.mielczarek, brdevmn A=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@543 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Tolerate STABS data from code linked with --gc-sections.jimblandy2010-03-023-2/+26
| | | | | | | | | | | | | Programs compiled with -ffunction-sections -Wl,--gc-sections may have SO entries for the start of the compilation unit whose addresses are zero, even when the compilation unit contains non-omitted functions at non-zero addresses. The breakpad dumper should not assume that the compilation unit starting address is always non-zero. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@542 4c0a9323-5329-0410-9bdc-e9ce6186880e
* ARM support, with some build system changes to support x86-64, arm, and i386 ↵nealsid2010-03-0213-105/+473
| | | | | | | | | | | in an autoconf style build in Linux. The O2 build for the unit tests is still broken but I'm checking this in to unblock people A=nealsid R=ajwong, hannahtang, ted.mielczarek git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@541 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux symbol dumper: Handle programs linked with --gc-sections.jimblandy2010-02-243-0/+142
| | | | | | | | | | | | | | | | | | | | | | | | | | | | As explained in the code: Given the right options, the GNU toolchain will omit unreferenced functions from the final executable. Unfortunately, when it does so, it does not remove the associated portions of the line number program; instead, it lets the symbol references in the DW_LNE_set_address instructions pointing to the now-deleted code resolve to zero. Given this input, the DWARF line parser will call AddLine with a series of lines starting at address zero. Rather than collecting series of lines describing code that is not there, we should drop them. Since the linker doesn't explicitly distinguish references to dropped sections from genuine references to zero, we must use a heuristic. We have chosen: - If a line starts at address zero, omit it. (On the platforms breakpad targets, it is extremely unlikely that there will be code at address zero.) - If a line starts immediately after an omitted line, omit it too. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@538 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad processor: Support negative literals in the postfix evaluator.jimblandy2010-02-241-4/+18
| | | | | | | | | | | | | Some versions of the libstdc++, the GNU standard C++ library, have stream extractors for unsigned integer values that permit a leading '-' sign (6.0.13); others do not (6.0.9). Regardless of the behavior of the extractors, Breakpad postfix expressions should support negative literals. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@537 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Add missing newlines to error messages.jimblandy2010-02-231-2/+2
| | | | | | | | | | Some of the error messages that could be generated in the process of parsing DWARF debugging information lack terminating newlines. a=jimblandly, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@536 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Record AbstractOrigin entries for all DIEs that need ↵jimblandy2010-02-202-20/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | them. Any DIE with an DW_AT_inline attribute can be cited by DW_AT_abstract_origin attributes --- even if the value of the DW_AT_inline attribute is DW_INL_not_inlined. Thus, we need to set the inline_ flag on all such DIEs, regardless of the attribute's value. This allows us to find names in situations like this: <1><30cf>: Abbrev Number: 57 (DW_TAG_subprogram) <30d0> DW_AT_specification: <0x3013> <30d4> DW_AT_decl_file : 1 <30d5> DW_AT_decl_line : 92 <30d6> DW_AT_inline : 0 (not inlined) <30d7> DW_AT_sibling : <0x30f0> ... <1><30f5>: Abbrev Number: 59 (DW_TAG_subprogram) <30f6> DW_AT_abstract_origin: <0x30cf> <30fa> DW_AT_low_pc : 0x13bc <30fe> DW_AT_high_pc : 0x13ec <3102> DW_AT_frame_base : 0x2c (location list) <3106> DW_AT_sibling : <0x3113> a=jimblandy, r=nealsid,dmuir git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@526 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Compare section names correctly.jimblandy2010-02-181-1/+7
| | | | | | | | | | | | | | | | | | | FindSectionByName will return the first section whose name starts with NAME, because strncmp stops the comparison once NAME's characters have been found to match. The comparison stops before the terminating '\0'. For example, if we search for the section named ".eh_frame", we may get the section named ".eh_frame_hdr". Instead, check that the section name section has enough space to store the complete name with its terminating '\0', and then use strcmp, which will never examine more than strlen(NAME) + 1 bytes from the section name section, regardless of its contents, and will require the terminating '\0' to match as well. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@525 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad DWARF parser: Expand comments for ByteReader class.jimblandy2010-02-111-43/+122
| | | | | | | | | | | | This is preparation for adding support for reading Linux C++ exception handling data's encoded pointers. The change should have no user-visible effect; it simply expands the comments for dwarf2reader::ByteReader, and regroups the member functions. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@522 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Linux DWARF reader: Follow DW_AT_abstract_origin links to find function names.jimblandy2010-02-105-3/+267
| | | | | | | | | | | | | | | | | | | | | | | | | | Without this patch, debugging information like the following will produce FUNC records with no names, because the dumper (correctly) ignores the DW_TAG_subprogram DIEs that lack DW_AT_low_pc/DW_AT_high_pc attributes, but won't follow the DW_AT_abstract_origin link from the DIE that does have code addresses to find its name. <1><168>: Abbrev Number: 5 (DW_TAG_class_type) <169> DW_AT_name : Foo <2><183>: Abbrev Number: 7 (DW_TAG_subprogram) <185> DW_AT_name : Foo <18b> DW_AT_declaration : 1 <1><1b7>: Abbrev Number: 12 (DW_TAG_subprogram) <1b8> DW_AT_specification: <0x183> <1bc> DW_AT_inline : 2 (declared as inline but ignored) <1><1dc>: Abbrev Number: 16 (DW_TAG_subprogram) <1dd> DW_AT_abstract_origin: <0x1b7> <1e1> DW_AT_low_pc : 0x8048578 <1e5> DW_AT_high_pc : 0x8048588 a=dmuir, r=jimblandy git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@520 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Don't be silly about global functions.jimblandy2010-02-093-12/+11
| | | | | | | | | | | | Yes, classes are useful. But that doesn't mean that every function has to gratuitously become a member function. The Google C++ Style Guide does not require this silliness, since the function is in the google_breakpad namespace anyway. a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@519 4c0a9323-5329-0410-9bdc-e9ce6186880e
* Breakpad Linux dumper: Add file comments as required by the style guide.jimblandy2010-02-0923-17/+116
| | | | | | | | | | | | | | | | | | | | | | This also includes some comments I promised Cary Coutant I'd write about the appropriateness of processing attributes in EndAttributes calls. The Google C++ Style Guide requires each file to have an author notice and a comment explaining the file's general purpose. For the record, I don't think putting an author notice on the files is a good idea; it's odd to have the original author retain prominence even if the file has been heavily edited by others; the version control system answers this question more accurately. This is only for Style Guide compliance. The Apache group decided to discourage author annotations, partially for these reasons: http://mail-archives.apache.org/mod_mbox/jakarta-jmeter-dev/200402.mbox/%3C4039F65E.7020406@atg.com%3E a=jimblandy, r=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@518 4c0a9323-5329-0410-9bdc-e9ce6186880e